我正在编写一个小型的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):
我在这里使用场景管理器对象的方法来处理各种事情。
首先,我想了解为什么我会收到错误,并且对任何有关更好的处理方法的建议也持开放态度。我不确定使用像这样的全局变量是不是一个好主意。
答案 0 :(得分:6)
您不应在.h文件中定义全局变量。你应该在.h中声明它们,如下所示:
extern scnManger* sceneManger;
然后在一个 cpp文件中定义它们,如下所示:
scnManger* sceneManger;
否则,包含.h文件的每个cpp文件都将声明sceneManger
变量,从而导致名称冲突。