2012-01-10 9 views
2

Matrixクラスを実装していて、*+の演算子をオーバーロードしました。私はまた、すべての位置にinit_valを保持するように初期化された行列を構築するコンストラクタを持っています:算術式内でコンストラクタを呼び出すことはできますか?

したがって、この実装に基づいて、私は私のテストプログラムを持っている:

Matrix<int> mi4 = Matrix<int> (2, 2, 3) + Matrix<int> (2, 2, 1); 

コンパイラは私に次のエラーを与える:

testMatrix.cpp:41: error: ambiguous overload for ‘operator+’ in ‘Matrix<int>(2, 2, ((const int&)((const int*)(&3)))) + Matrix<int>(2, 2, ((const int&)((const int*)(&1))))’ 
Matrix.h:91: note: candidates are: Matrix<elemType> operator+(const Matrix<elemType>&, const Matrix<elemType>&) [with elemType = int] 

私はあなたが式の中でコンストラクタを呼び出すことができ、C++標準ライブラリに覚えています。私はそれをどのように実装できますか?どうもありがとう!

+7

エラーメッセージの最後の行を残しました。それは問題を特定するのに役立ちます。 –

+1

エラーメッセージに候補の1つが表示されます。確かに1つ以上リストされた?さもなければ曖昧ではないだろうか? (これは私が思う@DrewDormannのポイントです)。 –

答えて

7

問題はコンストラクタではありませんが、Matrixテンプレートの宣言はoperator+です。それらのうちの2つを持っていますか(おそらく、そのうちの1つをoperator*にリネームするのを忘れていましたか)?

+0

または 'const'修飾子? –

+0

@KerrekSBいいえ、 'const'を残すと、オーバーロードのあいまい性が発生しません。rvalueは非const参照にバインドできません。 – Begemoth

+1

@Begemoth:私は 'this'-const-qualifierを意味しました... –

関連する問題