1

静的変数の設定中に次のエラーが発生する

error: expected primary-expression before '.' token

「GameScene.h」

#ifndef __GAME_SCENE_H__
#define __GAME_SCENE_H__

class Game {
public:

    enum InteractionMode {
        EDITING,
        PLAYING };
    static Game::InteractionMode mode;
}
#endif // __GAME_SCENE_H__

「GameScene.cpp」

#include "GameScene.h"

Game *Game::singleton() {
    if (_GameSingleton == NULL) {
        _GameSingleton = Game::create();
        Game::mode = Game::InteractionMode.PLAYING;   //error on this line
    }
    return _GameSingleton;
}
4

3 に答える 3

3

それ以外の

Game::mode = Game::InteractionMode.PLAYING

直接書く

Game::mode = PLAYING

また、そのままmodestatic、次を追加して、クラスの外で定義する必要があります。

Game::InteractionMode Game::mode;
于 2013-03-28T11:28:54.827 に答える
3

列挙定数は周囲のオブジェクトのスコープ内にあるため、たとえば次のことができます。

Game::mode = Game::PLAYING;

または、関数がGame既にクラスのスコープ内にあるため:

mode = PLAYING;

または、本当に完全なスコープを使用したい場合は::、列挙にもスコープ演算子を使用します。

Game::mode = Game::InteractionMode::PLAYING;
于 2013-03-28T11:29:17.453 に答える
0

あなたのケースでは、列挙の項目は囲んでいる型の中で定義されていますclass Game。列挙型の名前はアイテムの一部になりません。を使用してエラーを修正できますGame::PLAYING

C++11 では、列挙型の名前も含めることができるため、Game::InteractionMode::PLAYING. MSVC では、これは以前の C++ バージョンでも機能しますが、非標準の拡張に関する警告が表示されます。::いずれにせよ、の代わりに使用する必要があります.

C++11 準拠のコンパイラを使用する場合は、次のことができます。

enum class InteractionMode {
        EDITING,
        PLAYING };
// [...]
mode = Game::InteractionMode::PLAYING;

含めるclassと、完全なスコープが可能になります。

于 2013-03-28T11:31:02.277 に答える