0

最終的に +、-、*、/、解法などの多項式を実行できるプログラムを作成しようとしています。2 つの単項式を追加しようとする単純なケースから始めて、ゆっくりと構築していきます。+ 演算子をオーバーロードしようとしていますが、エラーが発生し続けます:

'm1 + m2' の 'operator+' に一致しないエラー

主に私はそれを次のように呼んでいます:

Monomial m1(2,3);
Monomial m2(3,3);
Monomial result;
result = m1 + m2; // I get an error when trying to do this.

私の多項式クラスヘッダーでは、次のように定義しています。

friend Polynomial operator+ (const Monomial&, const Monomial&); 

私が実装した方法は次のとおりです。

Polynomial operator+(const Monomial& mono1, const Monomial& mono2){
    Polynomial poly;
    poly.coef = mono1.coef + mono2.coef;  // coef stands for coefficient
    poly.exp = mono1.exp;                 // exp stands for exponent
    return poly;
}

* 注: さまざまな指数などの実際のケースに飛び込む前に、最初に operator+ を機能させようとしているだけです。これは、単純なケースの要点にすぎません。2x^3 である m1(2,3) を渡します。m2(3,3) は 3x^3 であり、明らかに 5x^3 に等しいはずですが、エラーが発生します。私が見つけた結果の部分を印刷することについて心配しないでください。

4

2 に答える 2

0

と実際の関係がないと仮定Polynormialして、これを試してください:Monomial

Monomial m1(2,3);
Monomial m2(3,3);
Polynomial result;
result = m1 + m2;
于 2013-11-08T06:07:13.360 に答える
0

まず、operator+を返す必要があるかもしれませんMonomial

しかし、あなたの問題は C++ スコープに関連しています。フレンド プロトタイプ宣言はMonomialクラスにスコープが設定されており、後で次のように記述したときにコンパイラで使用することはできません。

result = m1 + m2;

ステートメントの前に、そのスコープで表示される operator+() のプロトタイプが必要です。したがって、そのプロトタイプをコピーして前に宣言する必要があります (または実装を前に表示する必要があります)。

于 2013-11-08T13:28:14.370 に答える