没有匹配函数来调用''

时间:2013-02-27 13:55:46

标签: c++

我被赋予实现这个功能:

 "static double distanta (const Complex&, const Complex&);"

返回两个复数之间的距离。它在Complex类中的定义,我已经实现了它:

double Complex::distanta(const Complex &a, const Complex &b)
{    
    double x = a.real() - b.real();
    double y = a.imag() - b.imag();

    return sqrt(x * x + y * y);
}

据我所知,静态函数只能访问静态成员,而我的类只有

double _re;
double _im;

作为数据成员。

在主要功能中我称之为:

#include <iostream>
#include "complex.h"

using namespace std;

int main()
{
    Complex* firstComplexNumber; 
    firstComplexNumber = new Complex(81, 93);

    cout << "Numarul complex este: " << *firstComplexNumber << endl;

    Complex* secondComplexNumber;
    secondComplexNumber = new Complex(31, 19);

    cout << "Distanta dintre cele doua numere" <<endl << endl;
    Complex::distanta(firstComplexNumber, secondComplexNumber);
    return 0;
}

我得到的错误是:

错误:没有匹配函数来调用'Complex :: distanta(Complex *&amp;,Complex *&amp;)'

你可以告诉我,我做错了什么? 谢谢!

2 个答案:

答案 0 :(得分:21)

当您的函数接受引用(Complex*)时,您正在传递指针(const Complex&)。引用和指针是完全不同的东西。当函数需要引用参数时,您需要直接将对象传递给它。引用仅表示不复制对象。

要使对象传递给您的函数,您需要取消引用指针:

Complex::distanta(*firstComplexNumber, *secondComplexNumber);

或者让你的函数获取指针参数。

但是,我不会真正建议上述任何一种解决方案。既然你不需要在这里进行动态分配(并且因为你没有delete你所拥有的new而泄漏了内存),你最好不要首先使用指针:< / p>

Complex firstComplexNumber(81, 93);
Complex secondComplexNumber(31, 19);
Complex::distanta(firstComplexNumber, secondComplexNumber);

答案 1 :(得分:4)

您正在尝试传递需要引用的指针(不删除,因此泄漏内存)。你真的不需要这里的指针:

Complex firstComplexNumber(81, 93);
Complex secondComplexNumber(31, 19);

cout << "Numarul complex este: " << firstComplexNumber << endl;
//                                  ^^^^^^^^^^^^^^^^^^ No need to dereference now

// ...

Complex::distanta(firstComplexNumber, secondComplexNumber);