C++:静态成员函数和变量 - 重新定义静态变量?
问题描述:
我试图将Singleton设计模式为我的代码,但我开始一个奇怪的错误:C++:静态成员函数和变量 - 重新定义静态变量?
main.obj : error LNK2005: "private: static class gameState * gameState::state" ([email protected]@@[email protected]) already defined in gameState.obj
如果你不熟悉的单例模式,它基本上是用来执行只有1个实例整个程序中的某个对象。 下面是相关代码: gameState.h:
class gameState
{
public:
static gameState* Instance() {return state;}
.
.
.
private:
gameState();
static gameState* state;
};
gameState* gameState::state = new gameState();
而现在我只是用在main.cpp的文件对象的实例:
gameState *currState = gameState::Instance();
.
.
.
for_each(currState->getHumanPieces().begin(),currState->getHumanPieces().end(), drawPieces);
这似乎是我我试图重新定义gameState :: state,但无法弄清楚为什么......帮助任何人?
是解决了,但一个仍然存在错误,我其实并没有,因为我认为这只是另一种的一部分,再发表:
error LNK2019: unresolved external symbol "private: __thiscall gameState::gameState(void)" ([email protected]@[email protected]) referenced in function "void __cdecl `dynamic initializer for 'private: static class gameState * gameState::state''(void)" ([email protected]@@[email protected]@@YAXXZ)
任何好的建议,就如何解决一个以及?
感谢你们俩,其固定:d
答
你需要把静态gameState*
定义成一个源文件,即该行:
gameState* gameState::state = new gameState();
如果你把它放在一个包含多个源文件的头文件,每个头文件的定义为gameState::state
,这会在链接时导致错误。
对于后续问题,请使用Vadakkumpadaths建议:你需要为gameState
的构造函数,不仅声明提供的定义。
答
为您的构造函数添加定义以修复第二个链接器错误。
private:
gameState()
{
}
答
为重定义问题使用头文件保护宏,并明确定义您的私有构造函数。