静态数据成员的问题 - 修复链接错误会导致编译器错误
Problem with static data member - fixing linking error creates a compiler error
game.h:
enum Game_state { MAIN_MENU, /*...*/ };
namespace list { class Linked_list { public: Linked_list() {} }; }
class Game {
public:
static Game_state state;
static list::Linked_list<Obj> objs;
};
Game_state Game::state = MAIN_MENU;
list::Linked_list<Obj> Game::objs = list::Linked_list<Obj>();
这给了我链接器错误:multiple definition of Game::state (and Game::objs)
。
如果我取出类型说明符,它会给我编译器错误:'state' in 'class game' does not name a type (same for objs)
.
我只需要初始化这些成员。
我在 32 位上使用 mingw windows 10.
将 'game::stat' 和 'game::objs' 的定义放在 *.cpp 文件中,并 link 反对它。
您必须将这些定义移动到翻译单元(cpp 文件)中。否则每次在某处包含头文件时都会重新定义它们,这违反了 ODR。
game.h:
enum Game_state { MAIN_MENU, /*...*/ };
namespace list { class Linked_list { public: Linked_list() {} }; }
class Game {
public:
static Game_state state;
static list::Linked_list<Obj> objs;
};
Game_state Game::state = MAIN_MENU;
list::Linked_list<Obj> Game::objs = list::Linked_list<Obj>();
这给了我链接器错误:multiple definition of Game::state (and Game::objs)
。
如果我取出类型说明符,它会给我编译器错误:'state' in 'class game' does not name a type (same for objs)
.
我只需要初始化这些成员。
我在 32 位上使用 mingw windows 10.
将 'game::stat' 和 'game::objs' 的定义放在 *.cpp 文件中,并 link 反对它。
您必须将这些定义移动到翻译单元(cpp 文件)中。否则每次在某处包含头文件时都会重新定义它们,这违反了 ODR。