Подтвердить что ты не робот

Нет соответствующей функции для вызова ''

Мне было дано реализовать функцию:

 "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 * &, Complex * &)"

Не могли бы вы рассказать мне, что я делаю неправильно? Спасибо!

4b9b3361

Ответ 1

Вы передаете указатели (Complex*), когда ваша функция принимает ссылки (const Complex&). Ссылка и указатель - совершенно разные вещи. Когда функция ожидает опорный аргумент, вам необходимо передать объект непосредственно. Ссылка означает, что объект не копируется.

Чтобы получить объект для передачи вашей функции, вам необходимо разыменовать указатели:

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

Или попросите свою функцию принять аргументы указателя.

Однако я бы не предложил ни одно из вышеупомянутых решений. Поскольку здесь вам не требуется динамическое выделение (и вы пропускаете память, потому что вы не delete, что у вас есть new ed), вам лучше не использовать указатели в первую очередь:

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

Ответ 2

Вы пытаетесь передать указатели (которые вы не удаляете, тем самым теряя память), где нужны ссылки. Вам здесь не нужны указатели:

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

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

// ...

Complex::distanta(firstComplexNumber, secondComplexNumber);