我创建了一个定义了枚举的类。我还想为这个枚举定义一些运算符:
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之外?
答案 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。