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

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

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

我知道我可以做类似的事情:

enum class Color { red, green = 1, blue };
Color c = Color::blue;

if( c == Color::blue )
cout << "blue\n";

但是当我将 cout << "blue\n"; 替换为 cout << Color::green 时,它甚至无法编译。为什么不编译?

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

例如,如果您想打印数值,请在运算符中将颜色转换为 int

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

Demo.

如果您想将 enum 值打印为文本,see this Q&A for a sample implementation