Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:静态成员函数和变量-静态变量的重新定义?_C++_Static Members_Redefinition - Fatal编程技术网

C++ C++;:静态成员函数和变量-静态变量的重新定义?

C++ C++;:静态成员函数和变量-静态变量的重新定义?,c++,static-members,redefinition,C++,Static Members,Redefinition,我试图将单例设计模式合并到我的代码中,但我开始遇到一个奇怪的错误: main.obj : error LNK2005: "private: static class gameState * gameState::state" (?state@gameState@@0PAV1@A) already defined in gameState.obj 如果您不熟悉singleton模式,它基本上只用于在整个程序中强制执行某个对象的一个实例。 以下是相关代码: gameState.h: class g

我试图将单例设计模式合并到我的代码中,但我开始遇到一个奇怪的错误:

main.obj : error LNK2005: "private: static class gameState * gameState::state" (?state@gameState@@0PAV1@A) already defined in gameState.obj
如果您不熟悉singleton模式,它基本上只用于在整个程序中强制执行某个对象的一个实例。 以下是相关代码: 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)" (??0gameState@@AAE@XZ) referenced in function "void __cdecl `dynamic initializer for 'private: static class gameState * gameState::state''(void)" (??__E?state@gameState@@0PAV1@A@@YAXXZ)
关于如何解决这个问题,有什么好的建议吗


谢谢你们两位,它是固定的:D

您需要将静态
游戏状态*
的定义放入一个源文件中,即此行:

gameState* gameState::state = new gameState();
如果将其放在多个源文件包含的头文件中,则每个源文件都有一个
gameState::state
的定义,这会导致链接时出错


对于后续问题,请使用Vadakkumpadaths建议:您需要为
gameState
s构造函数提供定义,而不仅仅是声明。

为构造函数添加定义以修复第二个链接器错误

private:
gameState()
{
}

使用header guard宏解决重新定义问题,并显式定义私有构造函数