2017-04-10 7 views
0

+演算子をオーバーロードして2つのクラスに分けようとしています。 Polynomialと呼ばれる各クラスの中には、polyStructという名前のStructがあります。データを追加してからその合計を戻します。しかし、私は運がない。型の無効なオペランドクラスポインタとクラスのバイナリ演算子へのポインタ+

完全なエラーがあります。エラー:ここではバイナリ「演算子+」への種類の無効なオペランド「多項式*」と「多項式*」

は私のクラスである:ここでは

class Polynomial { 
public: 
    Polynomial(); 
    Polynomial(ifstream *data); 
    Polynomial* copyPolynomial(); 

    Polynomial* add(Polynomial *sec); 
    Polynomial operator+(const Polynomial& sec); 
    Polynomial* subtract(Polynomial *sec); 
    //poly operator-(const poly&); 

    bool equalPoly(Polynomial *sec); 

    double evaluate(int x); 

    int getDegree(); 
    void print(); 


private: 
    struct poly { 
     int exp; 
     double coeff; 
    } *polyStruct; 

    List polyList; 

}; 

は私の演算子オーバーロードです:私のoperaterを使用しようとすると

Polynomial Polynomial::operator+(const Polynomial& sec) { 
Polynomial temp = new Polynomial(); 

temp.polyStruct->exp = polyStruct->exp; 
temp.polyStruct->coeff = polyStruct->coeff + sec.polyStruct->coeff; 

return temp; 
} 

私は次のことをやっている: newPoly =メイン+秒を。 すべての変数は個別に初期化された多項式です。 何が間違っているのかに関するアイデアはありますか?

答えて

0

エラーメッセージから、Polynomialへの2つのポインタで演算子を使用しようとしているようです。このような場合は、最初に*のポインタを逆参照する必要があります。

class Polynomial { 
public: 
    Polynomial* operator+(const Polynomial& sec); 
}; 

Polynomial* Polynomial::operator+(const Polynomial& sec) { 
    Polynomial* temp = new Polynomial(); 

    temp->polyStruct->exp = polyStruct->exp; 
    temp->polyStruct->coeff = polyStruct->coeff + sec.polyStruct->coeff; 

    return temp; 
} 

Polynomial* polynomial1 = new Polynomial(); 
Polynomial* polynomial2 = new Polynomial(); 
Polynomial* polynomial3 = (*polynomial1) + (*polynomial2); 
0

演算子オーバーロード内tempを構築するときにnew演算子を使用しているので、変数tempPolynomialタイプではなく、Polynomial*タイプ。

ただし、演​​算子のオーバーロードは、Polynomial型を返すと宣言されています。代わりにPolynomial*を返すように演算子のオーバーロードを再宣言するか、返すときにtempを参照解除する必要があります。

関連する問題