设置值枚举

时间:2020-02-27 20:50:34

标签: c++ enums

我是C ++的初学者,如果这很明显,我感到很抱歉,但是将值分配给枚举存在问题。我已经在头文件中声明了枚举:

 enum face
    {   paramControlHeight = 40,
        paramLabelWidth    = 80,
        paramSliderWidth   = 300
    };

并尝试分配一个整数。不用说这是行不通的:

paramControlHeight = 40;//Not assignable

搜索了一段时间后,我尝试了:

using type_of_p=decltype(paramControlHeight);

据我所知,应该产生paramControlHeight的类型,并允许我使用

paramControlHeight=static_cast<type_of_p> (40);

但是我收到相同的“无法分配”错误

如果有人能指出正确的方向,我将不胜感激

2 个答案:

答案 0 :(得分:2)

我想为枚举内的“ paramControlHeight”分配一个不同的值。因此,例如,它开始为40,但是我想稍后将其更改为80

您似乎误解了枚举。您似乎希望枚举像这样

struct face
{   int paramControlHeight = 40;
    int paramLabelWidth    = 80;
    int paramSliderWidth   = 300;
};

face f;                     // create instance
f.paramControlHeight = 40;  // modify member

但是,枚举就像

struct face
{   
    static const int paramControlHeight = 40;
    static const int paramLabelWidth    = 80;
    static const int paramSliderWidth   = 300;
};

现在回到您的实际枚举:

enum face
{   paramControlHeight = 40,
    paramLabelWidth    = 80,
    paramSliderWidth   = 300
};

此处paramControlHeight是一个值为40的枚举数。您不能修改它。它无意被修改。它旨在枚举。您可以做的是:

face f{ paramControlHeight };   // create instance of face
f = paramSliderWidth;           // assign a different value to it

更典型的枚举是

enum face_parts {
    nose = 1,
    eye = 2,
    mouth = 3
};

您可以这样使用

void print_face_part( face_parts fp ){
    if (fp == nose) std::cout << "nose";
    if (fp == eye) std::cout << "eye";
    if (fp == mouth) std::cout << "mouth";
}

简单来说,枚举使您可以命名和分组常量。请注意,自C ++ 11起,scoped enums更加灵活,并且没有在封闭的名称空间中引入枚举器的名称。

答案 1 :(得分:1)

paramControlHeightparamLabelWidthparamSliderWidth 值。除了为42分配值以外,您不能给它们分配其他任何东西。