enum char decline c ++

时间:2018-02-01 21:24:04

标签: c++ enums

我正在尝试创建一个接收字符作为参数的函数,并使用它来确定我将文本更改为什么颜色。 顺便说一句,这是一个窗口和“空项目”。 所以我想我会根据输入切换选择正确的颜色,但由于我不能在开关中使用字符作为案例,我尝试使用枚举:

void setColour(char txt)
{
enum colour {R=1,G,B,T,H,N,O,Y,P,W};
colour text = txt;
....
}

但是我收到了一个错误:“ 值“char”不能用于初始化实体类型“color” ”

发生了什么,如何按上述方式进行?

3 个答案:

答案 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)

编译器试图说明类型charcolours是不同的类型,而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。 我只是对你的问题提出建议,而不是答案。