1

设置静态变量时出现以下错误

error: expected primary-expression before '.' token

“游戏场景.h”

#ifndef __GAME_SCENE_H__
#define __GAME_SCENE_H__

class Game {
public:

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

“游戏场景.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;

或者,如果你真的想使用完整的作用域,你也可以使用 scope-operator::进行枚举:

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 回答