全局指针"已定义为"错误

Gre*_*g G 2 c++

我正在写一个小的DirectX模型查看器.

我刚刚写完了我的场景管理员.

我将只有1个场景管理器对象,所以我的想法是创建一个类型为"scnManger"的全局指针,然后在创建场景管理器对象时设置它.

这将让我从我的应用程序的任何地方到达它.

我收到了编译错误:

1>shaderViewer.obj : error LNK2005: "class scnManger * sceneManger" (?sceneManger@@3PAVscnManger@@A) already defined in sceneManager.obj
1>C:\Users\Greg\Documents\Visual Studio 2010\Projects\ShaderViewer\Debug\ShaderViewer.exe : fatal error LNK1169: one or more multiply defined symbols found
Run Code Online (Sandbox Code Playgroud)

现在我有3个文件

sceneManger.h:

// Our global scene manger variable

scnManger* sceneManger;
Run Code Online (Sandbox Code Playgroud)

shadherViewer.cpp(winMain&包括sceneManger.h):

scnManger shaderViewerScnManger; 
sceneManger = &shaderViewerScnManger;
Run Code Online (Sandbox Code Playgroud)

sceneManger.cpp(包括sceneManger.h):

我在这里使用我的场景管理器对象的方法来处理各种事情.

首先,我想了解为什么我会收到错误,并且我也愿意接受有关更好的处理方法的建议.我不确定使用像这样的全局变量是不是一个好主意.

das*_*ght 6

您不应该在.h文件中定义全局变量.你应该在.h中声明它们,如下所示:

extern scnManger* sceneManger;
Run Code Online (Sandbox Code Playgroud)

然后在一个 cpp文件中定义它们,如下所示:

scnManger* sceneManger;
Run Code Online (Sandbox Code Playgroud)

否则,包含.h文件的每个cpp文件都将声明该sceneManger变量,从而导致名称冲突.