web-dev-qa-db-ja.com

コードの別の部分でクラスのEnum値を使用するにはどうすればよいですか?

地元の大学の夜間コースのC#のバックグラウンドから来て、私はC++で自分の道を始めました。構文に慣れるのに苦労します。また、コーディング技術に関しては、私はまだ非常に環境に優しいです。

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をInitの列挙値またはWinMain関数からのそのような値に設定したいです。他のエリアからも読みたいです。

エラーが表示されます...

expected primary-expression before '.' token

core.gameMode = Core::GAME_MODE.INIT;を使用しようとすると、同じエラーが発生します。

ファイル間でC++の変数を渡すことの基本的な理解を得ようとしているだけなので、ベストプラクティスについては大したことはありません。構文の柔軟性に慣れたら、後で変数が保護され、きちんと隠れていることを確認します。

正しく覚えていれば、C#は他のクラスのEnumを使用することを許可し、Core.ENUMNAME.ENUMVALUEのようなものだけでした。

私がやりたいことが明確であることを願っています:\正しい用語の多くが何であるか見当がつかないので。

35
ChiggenWingz

使用する

core.gameMode = Core::INIT;

列挙の個々の値のスコープは、その列挙内ではなく、列挙自体と同じレベルです。これは他のほとんどの言語(C#を含む)が異なる方法であり、C++ 0xは両方のバリアントを許可するため、

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

法的にもなります。

さらに、C++ 0x(enum class)列挙値を配置しますのみ列挙のスコープ内(つまりC#の場合)。これにより、コメントで指摘した「通常の」列挙型の場合、列挙値の識別子は同じスコープで定義されているすべての列挙型で一意である必要があるという問題が解決されます。

45
Martin B