0

このプログラムをコンパイルしようとしましたが、関数の 1 つに対する * 演算子のオーバーロードに関するエラーが発生しました:複合演算子 *(double n)const

コンパイルしようとすると、「2 * c」の「operator*」に一致しないというエラーが表示されます

ヘッダーファイルは次のとおりです。

複雑な.h

#ifndef COMPLEX0_H
#define COMPLEX0_H

class complex {
    double realNum;
    double imagNum;
public:
    complex();
    complex(double x,double y);
    complex operator *(double n)const;
    complex operator *(const complex &c1)const;
   friend std::istream &operator>>(std::istream &is,complex &cm);
   friend std::ostream &operator<<(std::ostream &os,const complex &cm);
};

#endif

ここにcppがあります:

コンプレックス.cpp

 #include "iostream"
#include "complex0.h"

complex::complex() {
    imagNum = 0.0;
    realNum = 0.0;
}

complex::complex(double x, double y) {

    realNum = x;
    imagNum = y;
}

complex complex::operator *(const complex& c1) const{
complex sum;
sum.realNum=realNum*c1.realNum-c1.imagNum*imagNum;
sum.imagNum=realNum*c1.imagNum+imagNum*c1.realNum;
    return sum;
}

complex complex::operator *(double n)const{ 
    complex sum;
    sum.realNum=realNum*n;
    sum.imagNum=imagNum*n;
    return sum;

}
std::istream &operator >>(std::istream& is, complex& cm) {
    is >> cm.realNum>> cm.imagNum;
    return is;
}

std::ostream &operator <<(std::ostream& os, const complex& cm){
os<<"("<<cm.realNum<<","<<cm.imagNum<<"i)"<<"\n";    
return os;
}

main.cpp

#include <iostream>
using namespace std;
#include "complex0.h" 

    int main() {
        complex a(3.0, 4.0); 
        complex c;
        cout << "Enter a complex number (q to quit):\n";
        while (cin >> c) {
            cout << "c is " << c << "\n";
            cout << "a is " << a << "\n";
            cout << "a * c" << a * c << "\n";
            cout << "2 * c" << 2 * c << "\n";
            cout << "Enter a complex number (q to quit):\n";
        }
        cout << "Done!\n";
        return 0;
    }

誰かが私が間違ったことを説明できますか?

4

2 に答える 2

0

次のように定義されたメンバー関数があります。

complex complex::operator *(double n) const;

これにより、次のようなことcomplex_number * 3.0ができ3.0 * complex_numberます。ただし、実行できるメンバー関数を作成することはできません3.0 * complex_number。そのメンバー関数を作成できる唯一の場所はdouble、変更できない の定義内です。

ただし、メンバー関数として行う代わりに、独立した関数として行うこともできます。

complex operator*(complex x, double n); // Called for complex_number * 2.0
complex operator*(double n, complex x); // Called for 2.0 * complex_number
于 2013-07-17T19:23:09.397 に答える