我正在尝试创建一个接收字符作为参数的函数,并使用它来确定我将文本更改为什么颜色。 顺便说一句,这是一个窗口和“空项目”。 所以我想我会根据输入切换选择正确的颜色,但由于我不能在开关中使用字符作为案例,我尝试使用枚举:
void setColour(char txt)
{
enum colour {R=1,G,B,T,H,N,O,Y,P,W};
colour text = txt;
....
}
但是我收到了一个错误:“ 值“char”不能用于初始化实体类型“color” ”
发生了什么,如何按上述方式进行?
答案 0 :(得分:2)
枚举是整数,而不是字符。 R,G,B,T等只是表示整数1,2,3,4等的标签。
因此,当您设置text = txt
时,您正试图将char强制转换为整数变量。
你可能最好坚持使用字符并再次尝试使用switch语句。只需确保将您的字符包装在“单引号”中即可。所以编译器知道你的意思是char。
void setColour(char txt)
{
switch (txt)
{
case 'R':
break;
case 'T':
break;
default:
}
}
答案 1 :(得分:1)
编译器试图说明类型char
和colours
是不同的类型,而char值不能分配给颜色值。您可以使用static_cast
解决此问题,但不费吹灰之力。例如,如下所示。此错误非常有用,因为数值类型的值范围比枚举值宽得多。
void setColour(char txt)
{
enum colour: char {MIN, R=1,G,B,T,H,N,O,Y,P,W, MAX};
colour text = R; // default colour
if (MIN < txt && txt < MAX)
text = static_cast<colour>(txt);
....
}
由于您使用char
作为数字类型,因此最好使用例如uint8_t
。它将有助于避免对'R'char和R enum值的误解。
答案 2 :(得分:0)
枚举数据类型的对象是整数类型。所以你不能将一个char分配给一个int变量(但反之亦然)。 要解决您的问题,您可以映射您的数据类型(如1-红色,2-黑色......) 或者将char变量类型转换为int变量。
void setColor(char txt)
{ enum colour {R=1,G,B,T,H,N,O,Y,P,W}; colour text =(int) txt;
cout<<(char) txt;. // Assume text=b output b
....}
For better understanding of enum
使用开关盒可以解决您的问题。 using chars in switch case。 我只是对你的问题提出建议,而不是答案。