我已经了解到,在两个枚举共享一个equaly命名项时,将枚举放入命名空间可以避免编译错误.
namespace Feeling
{
enum e
{
Happy = 1,
Sad = 2,
Blue = 4,
Angry = 8,
Mad = 16
};
}
Run Code Online (Sandbox Code Playgroud)
所以你可以把它传递给声明的函数
void HowDoYouFeel(Feeling::e feeling);
Run Code Online (Sandbox Code Playgroud)
但是当尝试OR时,它是这样的:
HowDoYouFeel(Feeling::Happy | Feeling::Blue);
Run Code Online (Sandbox Code Playgroud)
我收到一个错误.处理这个问题的最佳方法是什么?
详细说明问题时,您应指定:
在这种情况下,您错过了错误.例如,以下代码:
namespace Feeling {
enum e { Happy = 1, Sad = 2, Blue = 4, Angry = 8, Mad = 16 };
}
int main() {
Feeling::e ff1;
ff1 = Feeling::Happy | Feeling::Sad;
// ff1 = (Feeling::e)(Feeling::Happy | Feeling::Sad);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
给出错误:
error: invalid conversion from ‘int’ to ‘Feeling::e’
Run Code Online (Sandbox Code Playgroud)
因为|运营商的结果是int.
但是,注释掉第一个赋值并使用第二个赋值(使用其显式转换)编译好了.