0

テンプレートのPolynomクラスの演算子をオーバーロードしようとし+=ているので、Polynomsと定数の両方を引数として使用できます。

クラス内にコンストラクターと次の演算子を作成しました。

Polynom(const T& num = 0) {
  coefs.push_back(num);
}
friend Polynom& operator += (Polynom& lhs, const Polynom& rhs) {
  ...
}

そしてそれはうまくいきます、私は使うことができます:poly += 1;。コンパイラがそのようなものに遭遇したとき、それは何をしますか?これらの引数を使用する+=演算子がないことがわかります。

(Polynom<int>& lhs, const int)

しかし、次の1つがあります。

(Polynom<int>& lhs, const Polynom& rhs)

だから、それはに変換しようとconst intconst Polynom&ますか?そして、そのためにコンストラクターを使用しますよね?しかし、定数を追加するときにこの宣言が機能しないのはなぜですか。

Polynom& operator += (Polynom& rhs) {
  ...
}

コンパイラは「演算子+="に一致しません。

4

2 に答える 2

3

intをとる関数にを渡すとき、コンパイラは、パラメータにバインドされたからconst Polynom&一時Polynomオブジェクトを構築できます。ただし、一時は非const参照にバインドできないため、これはパラメーターでは発生しません。intconst Polynom&Polynom&

于 2012-11-15T20:49:31.130 に答える
0

問題を示すテンプレートコードまたはコンパイル可能な最小のコードを提示する必要があります。

整数パラメーターを受け入れるメソッドを作成してみてください。

friend Polynom& operator+=(const Polynom& lhs, int constant);

クラスがテンプレートPolynom<int>であることを示す表記法について混乱しています。Polynom

于 2012-11-15T20:54:02.497 に答える