gpt4 book ai didi

c++ - 全局指针 "already defined in"错误

转载 作者:搜寻专家 更新时间:2023-10-31 00:18:17 25 4
gpt4 key购买 nike

我正在编写一个小的 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个文件

场景管理器.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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com