c++ 打印枚举值

Ape*_*tor 2 c++ enums

我有以下代码(实际上更长,我只是放置引发错误的部分)

//Header class
enum class Color{
    Rouge,  Bleu, Vert

};  

class Bike{
     Color _color;
     Bike (Color color): _color(color){
}

void print() const;
}

//Cpp file (assume all inclusions are done properly)
void Bike::print() const{
 std::cout<<_color;
}
//Main
main(){
    Color couleur (Color::Rouge);
    Bike obj(couleur);
    obj.print()


} 
Run Code Online (Sandbox Code Playgroud)

因此,在我打印颜色 ( std::cout<<_color;) 之前,其他一切都工作正常。我是不是用enum错方法了?为什么我不能打印那种颜色?

错误代码

[Error] initializing argument 1 of 'std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = Color]'
Run Code Online (Sandbox Code Playgroud)

Ros*_*lav 8

除了创建构造函数和print函数之外public,您还应该知道enum class不能隐式转换为int. int因此,您可以在函数中手动将其转换为print:

std::cout << static_cast<int>(_color);
Run Code Online (Sandbox Code Playgroud)

或重载输出运算符Color:

std::ostream& operator<<(std::ostream& o, Color c)
{
    std::cout << static_cast<int>(c);
    return o;
}
Run Code Online (Sandbox Code Playgroud)

这样,您可以为您的颜色做一些更好的输出 - 也许输出枚举值的字符串表示形式。

这是cpp.sh上的一个实例