or'ing名称空间中的枚举

byt*_*e77 0 c++ enums

我已经了解到,在两个枚举共享一个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)

我收到一个错误.处理这个问题的最佳方法是什么?

pax*_*blo 5

详细说明问题时,您应指定:

  • 显示问题的最小代码示例;
  • 预期的行为; 和
  • 实际行为.

在这种情况下,您错过了错误.例如,以下代码:

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.

但是,注释掉第一个赋值并使用第二个赋值(使用其显式转换)编译好了.