5

我尝试用 oneoperator bool和 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 回答