Использование значения enum в структуре - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть следующий класс:

class MyClass 
{
    public:

        enum myEnum
        {
            a = 0b0,
            b = 0b1,
        };

        union myUnion
        {
            uint32_t all;

            struct myStruct
            {
                uint32_t start     : 0b1;
                uint32_t enumValue : myEnum::a;
            } bits;
        };

    ...

};

Я просто не уверен, как использовать значение myEnum::a в struct.Я пробовал несколько способов ссылки на значение безрезультатно.Как бы мне этого добиться?

Вот ошибка: Error: Name followed by "::" must be a class or namespace name in "MAX1300BEUG/MAX1300.h", Line: 50, Col: 37

Спасибо, Адам

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

Перечисления не имеют области видимости. Поэтому применение оператора разрешения области действия :: к myEnum неверно.

Значения перечисления объявляются во вложенном пространстве имен, поэтому в пределах myStruct, который находится в той же области видимости, что и myEnum, вы можете обращаться к его значениям напрямую, используя неквалифицированный поиск: a, b.

За пределами MyClass его можно разрешить с помощью MyClass::a.


P.S. Значение a равно 0. Битовое поле нулевой ширины не может быть названо. Между тем, что вы пытаетесь сделать, и тем, чего вы пытаетесь достичь, есть какая-то связь.

0 голосов
/ 17 сентября 2018

Здесь много чего происходит, поэтому я попытаюсь обратиться к этим элементам по одному.

Разрешение Enum Value Scope Resolution - в C ++ значения перечисления объявляются в той же области, что и перечисление(в отличие от C #, где перечисление является пространством имен для его значений).Полностью определенная область значений enum: ::MyClass::a и ::MyClass::b.Все префиксные компоненты в полностью квалифицированной области, которые совместно используются с областью действия ссылочного кода, могут быть опущены, пока пропуск не приводит к тому, что желаемое значение будет скрыто другим значением с тем же именем.Таким образом, в приведенном выше примере вы можете ссылаться на значения как a или b.

Другая проблема заключается в том, что MyClass::myStruct::enumValue объявляется как битовое поле нулевой длины, потому что MyClass::aимеет числовое значение 0.

0 голосов
/ 17 сентября 2018

myEnum::a определяется как 0. Битовые поля нулевой ширины в этом контексте недопустимы.

Сначала исправьте опечатки (их несколько, как вы можете видеть в разделе комментариев вашего вопроса).Во-вторых, не пытайтесь создать битовое поле нулевой ширины в этом контексте.

...