运算符重载枚举类

时间:2017-09-13 10:10:31

标签: c++ enums operator-overloading

我正在尝试重载enum类的&运算符,但是我得到了这个编译错误:错误:'operator& ='不匹配(操作数类型是'int'和'Numbers “)。有关于此的任何想法吗?

#include <iostream>
using namespace std;

enum class Numbers : int
{
    zero                    = 0, 
    one                     = 0x01,
    two                     = 0x02
};

inline int operator &(int a, Numbers b)
{
    return ((a) & static_cast<int>(b));
}

int main() {
    int a=1;
    a&=Numbers::one;
    cout << a ;
    return 0;
}

3 个答案:

答案 0 :(得分:5)

编译器确切地说明了什么是错的。你没有超载&=

尽管存在预期的语义,&=不会自动扩展为a = a & Numbers::one;

如果你想同时拥有两者,那么规范的方法通常就op来实现op=。因此,您的原始功能调整如下:

inline int& operator &=(int& a, Numbers b)
{ // Note the pass by reference
    return (a &= static_cast<int>(b));
}

新的使用它:

inline int operator &(int a, Numbers b)
{ // Note the pass by value
    return (a &= b);
}

答案 1 :(得分:1)

很好的问题,但是你非常有帮助的编译器诊断会告诉你需要知道的一切。

您缺少*按位AND赋值运算符“:operator&=

答案 2 :(得分:0)

是的,您正在重载运营商&。但是,您使用的是另一个运算符&=。也超载了,你会没事的。