我正在编写一个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

现在我有3个文件

sceneManger.h:
// Our global scene manger variable

scnManger* sceneManger;

shadherViewer.cpp(winMain,包括sceneManger.h):
scnManger shaderViewerScnManger;
sceneManger = &shaderViewerScnManger;

sceneManger.cpp(包括sceneManger.h):

在这里,我将场景管理器对象的方法用于各种用途。

首先,我想了解为什么会收到错误消息,并且也乐意接受任何有关更好地解决此问题的建议。我不确定使用这样的全局变量是否是个好主意。

最佳答案

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

extern scnManger* sceneManger;

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

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

关于c++ - 全局指针 “already defined in”错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11069138/

10-09 19:18