5

operator booloneと oneを使用してクラスを作成しようとしましたoperator void*が、コンパイラーはあいまいだと言います。使用する演算子をコンパイラに説明する方法はありますか、または両方を使用できないのですか?

class A {
public:
    operator void*(){
        cout << "operator void* is called" << endl;
        return 0;
    }

    operator bool(){
        cout << "operator bool is called" << endl;
        return true;
    }
};

int main()
{
    A a1, a2;
    if (a1 == a2){
        cout << "hello";
    }
} 
4

2 に答える 2

8

ここでの問題は、あなたが定義していることですoperator boolが、その音からあなたが望むものはoperator ==. void *または、次のように明示的にキャストすることもできます。

if ((void *)a1 == (void *)a2) {
    // ...
}

……しかし、それは本当に奇妙です。そうしないでください。代わりに、operator ==内部で次のようclass Aに定義します。

bool operator==(const A& other) const {
    return /* whatever */;
}
于 2010-11-28T01:41:42.977 に答える
4

オペレーターに直接電話することもできます。

int main()
{
    A a1, a2;
    if (static_cast<bool>(a1) == static_cast<bool>(a2)){
        cout << "hello";
    }
} 

ただし、この場合、operator==()変換に依存するのではなく、定義する必要があるようです。

于 2010-11-28T01:39:36.110 に答える