operator+=
メンバー関数としてoperator+
実装され、非メンバー関数として実装されているボリュームオブジェクトのテンプレートクラスがあります。
template <typename Class>
Class operator+(Class c1, const Class& c2) {
return c1 += c2;
}
// Add a constant to every element in the volume
template <typename Class, typename dataType>
Class operator+(Class c, dataType constant) {
return c += constant;
}
template <typename Class, typename dataType>
Class operator+(dataType constant, Class c) {
return c += constant;
}
それから私は以下をコンパイルしようとします:
volume + 1.3;
ここで、volumeは、テンプレート化されたボリュームクラスから派生したタイプです。これにより、次のエラーが発生します。
error: ambiguous overload for ‘operator+’ in ‘volume + 1.3’
呼び出しがあいまいなのはなぜですか?