我尝试使用一个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";
}
}
答案 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==()
而不依赖于转化。