为什么"cout << Color::green"不编译?

why doesn't "cout << Color::green" compile?

本文关键字:lt 编译 green Color cout 为什么      更新时间:2023-10-16

我在测试中遇到了这个问题。

我知道我可以做这样的事情:

enum class Color { red, green = 1, blue };
Color c = Color::blue;
if( c == Color::blue )
cout << "bluen";

但是当我用cout << Color::green替换cout << "bluen";时,它甚至不编译。为什么不编译?

发生

此错误是因为C++没有预定义的打印enum方式。您需要根据需要定义一个运算符<<,用于打印Color枚举类型的对象。

例如,如果要打印数值,请将颜色转换为运算符内部的int

ostream& operator<<(ostream& ostr, const Color& c) {
    ostr << (int)c;
    return ostr;
}

演示。

如果要将enum值打印为文本,请参阅此问答以获取示例实现。