我正在尝试重载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;
}
答案 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)
是的,您正在重载运营商&
。但是,您使用的是另一个运算符&=
。也超载了,你会没事的。