Установка значения для enum - PullRequest
0 голосов
/ 27 февраля 2020

Я новичок в 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 ]

2 голосов
/ 28 февраля 2020

Я хочу присвоить «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 есть перечислимых областей , которые являются более гибкими и не вводят имя перечислителей во вложенном пространстве имен.

1 голос
/ 28 февраля 2020

paramControlHeight, paramLabelWidth, paramSliderWidth являются значениями. Вы не можете присвоить им что-либо больше, чем вы можете присвоить значение 42.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...