在cpp文件中设置静态枚举变量的正确方法

时间:2013-03-28 11:27:53

标签: c++ static-members

设置静态var

时出现以下错误
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;
}

3 个答案:

答案 0 :(得分:4)

而不是

Game::mode = Game::InteractionMode.PLAYING

直接写

Game::mode = PLAYING

此外,由于modestatic,您必须在课堂外定义它,并添加:

Game::InteractionMode Game::mode;

答案 1 :(得分:3)

枚举常量位于周围对象的范围内,因此您可以执行以下操作:

Game::mode = Game::PLAYING;

或者,因为该函数已经在Game类的范围内了:

mode = PLAYING;

或者,如果您真的想要使用完全作用域,那么您也可以使用scope-operator ::进行枚举:

Game::mode = Game::InteractionMode::PLAYING;

答案 2 :(得分:0)

枚举的项目在封闭类型中定义,在您的案例class Game中。枚举的名称不会成为项目的一部分。您可以使用Game::PLAYING修复错误。

在C ++ 11中,也可以包含枚举的名称,因此您可以说Game::InteractionMode::PLAYING。对于MSVC,这也适用于早期的C ++版本,但是您会收到有关非标准扩展的警告。无论如何,您必须使用::代替.

如果使用符合C ++ 11的编译器,则可以执行以下操作:

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

包括class允许完整范围。