Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

no matching function for call to ' '

Tags:

c++

I was given to implement the function:

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

which return the distance between two Complex numbers. The definition of the function it is inside the Complex class and I have implemented it like that:

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);
}

As far as I know a static function can only access static members and my class only has

double _re;
double _im;

as data members.

Within the main function I have called it as:

#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;
}

and the error I get is:

error: no matching function for call to 'Complex::distanta(Complex*&, Complex*&)'

Could you please tell me what is it that I'm doing wrong? Thanks!

like image 274
Teodora Avatar asked Feb 27 '13 13:02

Teodora


2 Answers

You are passing pointers (Complex*) when your function takes references (const Complex&). A reference and a pointer are entirely different things. When a function expects a reference argument, you need to pass it the object directly. The reference only means that the object is not copied.

To get an object to pass to your function, you would need to dereference your pointers:

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

Or get your function to take pointer arguments.

However, I wouldn't really suggest either of the above solutions. Since you don't need dynamic allocation here (and you are leaking memory because you don't delete what you have newed), you're better off not using pointers in the first place:

Complex firstComplexNumber(81, 93);
Complex secondComplexNumber(31, 19);
Complex::distanta(firstComplexNumber, secondComplexNumber);
like image 95
Joseph Mansfield Avatar answered Sep 16 '22 14:09

Joseph Mansfield


You are trying to pass pointers (which you do not delete, thus leaking memory) where references are needed. You do not really need pointers here:

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

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

// ...

Complex::distanta(firstComplexNumber, secondComplexNumber);
like image 28
Andy Prowl Avatar answered Sep 20 '22 14:09

Andy Prowl