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