【问题标题】:c++ Print an enum value [duplicate]c ++打印枚举值[重复]
【发布时间】:2015-10-10 14:47:26
【问题描述】:

我有如下代码(其实比较长,我只是把报错的部分放上去)

//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()


} 

所以在我打印颜色 (std::cout&lt;&lt;_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]'

【问题讨论】:

标签: c++ enums


【解决方案1】:

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

std::cout << static_cast<int>(_color);

或者重载Color的输出操作符:

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

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

这是cpp.sh上的一个活生生的例子

【讨论】:

  • 谢谢,所以如果我想输出实际的字符串,我将不得不做一堆if-then else 声明?似乎效率很低
  • @ApexPredator 如果我是你,我会四处寻找如何在不重复的情况下做到这一点。最简单的解决方案是在输出运算符中使用名称数组:static std::array&lt;const char*, 3&gt; enumNames = {"Red", "Blue", "Green"}; std::cout &lt;&lt; enumNames[static_cast&lt;int&gt;(c)];
猜你喜欢
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 2021-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-31
相关资源
最近更新 更多