我正在写一个小的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):
我在这里使用我的场景管理器对象的方法来处理各种事情.
首先,我想了解为什么我会收到错误,并且我也愿意接受有关更好的处理方法的建议.我不确定使用像这样的全局变量是不是一个好主意.
您不应该在.h文件中定义全局变量.你应该在.h中声明它们,如下所示:
extern scnManger* sceneManger;
Run Code Online (Sandbox Code Playgroud)
然后在一个 cpp文件中定义它们,如下所示:
scnManger* sceneManger;
Run Code Online (Sandbox Code Playgroud)
否则,包含.h文件的每个cpp文件都将声明该sceneManger变量,从而导致名称冲突.
| 归档时间: |
|
| 查看次数: |
621 次 |
| 最近记录: |