说我有这个:
class Example {
enum class E { elem1, elem2 };
E& operator++(E& e) {
// do things
}
};
似乎很有意义,我甚至看到它在other questions中使用,但编译器告诉我参数只能是空的或者是int。
这在正常的课程中是有意义的,但是当我没有this
值时,我应该操作的是什么?
答案 0 :(得分:2)
您在类中定义的运算符适用于类Example
,因此参数和返回类型E&
不正确,编译器会告诉您。
标准告诉我们:
运算符函数应该是非静态成员函数或者是非成员函数[...]
它不能是E
的非静态成员函数,因此它必须是非成员函数。
您可以在Example
之外定义运算符,如下所示:
Example::E& operator++(Example::E& e) {
// modify e
return e ;
}
答案 1 :(得分:0)
正如@Shafik所回答的那样,你可以声明一个枚举的运算符,这个枚举在类中声明为非成员函数,如下所示:
class Example
{
public:
enum class Element
{
Element1,
Element2
};
};
Example::Element operator++(Example::Element element)
{
// do things
}
关于枚举的增量运算符的实现有一个很好的post。希望它能帮助你:))