【发布时间】:2020-02-26 07:36:26
【问题描述】:
游戏.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 位 Windows 10 上使用 mingw。
【问题讨论】:
-
静态成员定义属于源文件 (
.cpp),而不是头文件 (.h)。请出示完整的minimal reproducible example。 -
如果您在头文件中定义变量或函数,它们将在包含头文件的每个translation unit 中定义。函数和变量只需要定义一次。
-
另一方面,
list::linkedlist<obj> game::objs = list::linkedlist<obj>();实际上与list::linkedlist<obj> game::objs;相同
标签: c++ static linker linker-errors mingw32