Подтвердить что ты не робот

Как использовать значение Enum из класса в другой части кода?

Исходя из фона С# из ночного курса в местном колледже, я как-то начал свой путь на С++. Имея много боли, привыкающих к синтаксису. Я также все еще очень зеленый, когда речь идет о методах кодирования.

Из моей функции WinMain я хочу иметь доступ к переменной, которая использует перечисление, объявленное в другом классе.

(inside core.h)
class Core
{
    public:
    enum GAME_MODE
    {
        INIT,
        MENUS,
        GAMEPLAY
    };
    GAME_MODE gameMode;

    Core();
    ~Core();
    ...OtherFunctions();
};

(inside main.cpp)
Core core;
int WINAPI WinMain(...)
{
    ... startup code here...

    core.gameMode = Core.GAME_MODE.INIT;

    ...etc...
}

В принципе, я хочу установить этот gameMode для значения enum Init или что-то вроде этого из моей функции WinMain. Я хочу также прочитать его из других областей.

Я получаю ошибку...

expected primary-expression before '.' token

Если я пытаюсь использовать core.gameMode = Core::GAME_MODE.INIT;, тогда я получаю ту же ошибку.

Я не спорю о лучших практиках, так как я просто пытаюсь понять базовое понимание передачи переменных в С++ между файлами. Я буду следить за тем, чтобы переменные были защищены и аккуратно спрятаны позже, когда я использую гибкость синтаксиса.

Если я правильно помню, С# разрешил мне использовать Enums из других классов, и все, что мне нужно было сделать, это что-то вроде Core.ENUMNAME.ENUMVALUE.

Я надеюсь, что то, что я хочу сделать, ясно:\Поскольку я понятия не имею, что такое правильная терминология.

4b9b3361

Ответ 1

Использование

core.gameMode = Core::INIT;

Отдельные значения перечисления ограничены не в этом перечислении, а на том же уровне, что и перечисление. Это то, что большинство других языков (включая С#) делают по-другому, а С++ 0x допускает оба варианта, чтобы там

core.gameMode = Core::GAME_MODE::INIT;

также будет законным.

Кроме того, строго типизированные перечисления, которые будут добавлены в С++ 0x (enum class), будут помещать значения перечисления только в область перечисления (т.е. как в С#); это решает проблему, которую вы отметили в своем комментарии, что для "нормальных" перечислений идентификаторы для значений перечисления должны быть уникальными во всех перечислениях, определенных в той же области.