定义operator void *和operator bool

时间:2010-11-28 01:33:33

标签: c++ operators ambiguity

我尝试使用一个operator bool和一个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";
    }
} 

2 个答案:

答案 0 :(得分:8)

这里的问题是你要定义operator bool但是从它的声音中你想要的是operator ==。或者,您可以像这样显式地转换为void *

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

......但这真的很奇怪。不要那样做。相反,在operator ==

中定义class A这样的内容
bool operator==(const A& other) const {
    return /* whatever */;
}

答案 1 :(得分:4)

您可以直接致电运营商。

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

在这种情况下,看起来您应该定义operator==()而不依赖于转化。