设置静态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;
}
答案 0 :(得分:4)
而不是
Game::mode = Game::InteractionMode.PLAYING
直接写
Game::mode = PLAYING
此外,由于mode
为static
,您必须在课堂外定义它,并添加:
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
允许完整范围。