为什么我不能在一个类中有这两个重载?

时间:2011-03-27 05:51:02

标签: c++

在下面的代码中,如果我注释掉aaabbb,它将会编译。为什么我不能同时拥有两者?

#include <iostream>

class MyClass
{
private:
    typedef void (MyClass::*aaa)() const;
    typedef void (MyClass::*bbb)() const;
    void ThisTypeDoesNotSupportComparisons() const {}
public:
    operator aaa() const { return (true) ? &MyClass::ThisTypeDoesNotSupportComparisons : 0; }
    operator bbb() const { return (true) ? &MyClass::ThisTypeDoesNotSupportComparisons : 0; }
};

int main()
{
    MyClass a;
    MyClass b;

    if(a && b) {}
}

2 个答案:

答案 0 :(得分:6)

aaabbb的typedef是相同的。因此,您的转换运算符实际上声明了相同的功能。

基本上,编译器会看到

operator void (MyClass::*)() const { ... }

两次,一次用于aaa,一次用于bbb

答案 1 :(得分:1)

因为两者都是使用不同名称定义相同类型的类型。

aaa是指向MyClass的成员函数的指针,该函数不接受任何参数并返回void

bbb也是一回事。