私は演算子のオーバーロードに問題があります。
私はこのような演算子を持つクラスを書きたい:C++テンプレートのオーバーロードのためのあいまいなオペレータ
class BigNum
{
public:
template<class T>
bool operator==(const T &input);
template<class T>
friend bool operator==(const T &A,BigNum & B);
};
それが呼び出すために罰金です:
BigNum A;
int a;
A==a;
a==A;
しかし、呼び出し:
BigNum A,B;
A==B;
コンパイルエラー:
[Error] ambiguous overload for 'operator==' (operand types are 'BigNum' and 'BigNum')
[Note] bool BigNum::operator==(const T&) [with T = BigNum]
[Note] bool operator==(const T&, BigNum&) [with T = BigNum]
そして、私は
bool operator==(const BigNum &input);
に
template<class T>
bool operator==(const T &input);
を変更しかし、オペレータのオーバーロードは、このようなものです(それはAny type==BigNum
を行うことができない)場合、それはOKであれば、同じ問題があります:
class BigNum
{
public:
bool operator==(const BigNum &input);
template<class T>
bool operator==(const T &input);
};
それはこれらのすべてを行うことができるように演算子オーバーロードを書きたい:
- あらゆるタイプ== BIGNUM
- BIGNUMはどのようにすべき任意のタイプ
- BIGNUM == BIGNUM
を==それを修正する?ありがとう。
2つの 'BigNum'をとるテンプレートではなく、片側に' BigNum'、もう片側に 'T'をとるテンプレートが2つ必要です(' BigNum'を左に取るテンプレートはメンバ代わりに機能しますが、個人的には、3つの非メンバーをすべて対称性のために作っています)。 –
「電話するのは大丈夫ですが:...しかし、呼び出したとき:...エラー...」というコードには、代入演算子「=」がありません。同値ではありません。== ' – doctorlove