类不能包含内部定义的枚举的运算符函数?

时间:2014-07-21 18:06:41

标签: c++ class methods enums operator-overloading

我创建了一个定义了枚举的类。我还想为这个枚举定义一些运算符:

class MyClass
{
    public:
        enum MyEnum { CONSTA, CONSTB, CONSTC };
        // ...
        MyEnum& operator++(MyEnum& orig);
        MyEnum operator++(MyEnum& orig, int);
        // ...
}

对于此代码,gcc提供以下错误消息:

.../MyClass.h|10|error: postfix ‘MyClass::MyEnum& MyClass::operator++(MyClass::MyEnum&)’ must take ‘int’ as its argument
.../MyClass.h|11|error: ‘MyClass::MyEnum MyClass::operator++(MyClass::MyEnum&, int)’ must take either zero or one argument

这意味着,编译器认为我想为MyClass编写运算符,而不是为MyEnum编写运算符。所以它希望我减少争论。

我的问题是:

某个类在某种程度上是否包含除自身之外的其他东西的运算符函数(例如,对于内部类型),还是应该将这些函数移到MyClass之外?

1 个答案:

答案 0 :(得分:1)

您可以使用全局运算符重载来执行此操作

class MyClass
{
    public:
        enum MyEnum { CONSTA, CONSTB, CONSTC };
};

MyClass::MyEnum& operator++(MyClass::MyEnum& orig) { return ++orig; }
MyClass::MyEnum operator++(MyClass::MyEnum& orig, int) 
    { MyClass::MyEnum temp = orig++; return temp; }

请参阅可编辑代码here please