我试着用一个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";
}
} 发布于 2010-11-28 09:39:36
您可以直接调用操作员。
int main()
{
A a1, a2;
if (static_cast<bool>(a1) == static_cast<bool>(a2)){
cout << "hello";
}
} 但是,在这种情况下,看起来您应该定义operator==(),而不是依赖于转换。
发布于 2010-11-28 09:41:43
这里的问题是,您正在定义operator bool,但是从它的发音来看,您想要的是operator ==。或者,您可以显式转换为void *,如下所示:
if ((void *)a1 == (void *)a2) {
// ...
}..。但这真的很奇怪。别干那事。相反,在class A中像这样定义您的operator ==
bool operator==(const A& other) const {
return /* whatever */;
}https://stackoverflow.com/questions/4294873
复制相似问题