我有以下代码(它实际上更长,我只是提出了抛出错误的部分)
//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<<_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]'
答案 0 :(得分:2)
除了制作构造函数和print
函数public
之外,您还应该知道enum class
不能隐式转换为int
。因此,您可以在int
函数中手动将其转换为print
:
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
的实例