1. ホーム
  2. スクリプト・コラム
  3. その他

[解決済み】' ' への呼び出しにマッチする関数がない

2022-01-12 13:37:47

質問内容

2つの複素数間の距離を計算する関数を実装したいのですが、コードは以下の通りです。

 "static double distanta (const Complex&, const 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;
}

実行すると、エラーが発生します。

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

解決方法は?

ポインタを渡している( Complex* ) 関数が参照を受け取るとき ( const Complex& ). 参照とポインタは全く別のものです。関数が参照引数を期待する場合、オブジェクトを直接渡す必要があります。参照は、オブジェクトがコピーされないことを意味するだけです。

関数に渡すオブジェクトを得るには、ポインタをデリファレンスする必要があります。

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

あるいは、関数がポインタの引数を取るようにする。

しかし、私は上記のどちらの解決策もあまりお勧めしません。なぜなら、ここでは動的なアロケーションは必要ないからです。 delete あなたが持っているもの new ed)であれば、そもそもポインターを使わない方が良いのです。

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