我正在开发一个大型 c++ 项目并更改其他人的代码。在此期间,我收到一个链接器错误,指出引用VarA
是多重定义的。我找到了相应的变量,它已经定义在一个直接包含在项目中的 cpp 文件中。我试图将源文件转换为头文件和源文件,但不起作用。
然后我尝试将变量声明移动到仅包含此变量的新单独 h/cpp 中,它看起来像:
h 文件 (aaa.h)
#ifndef AAA_H
#define AAA_H
#include "classAdefinition.h"
extern ClassA VarA;
#endif
cpp 文件 (aaa.cpp)
#include "aaa.h"
ClassA VarA;
如果我现在包含aaa.h
在主文件中,则链接器错误会将新创建的内容添加aaa.obj
到错误消息中(例如VarA
,也在那里定义),这正是我所期望的。但是当我删除主文件中的定义时,我得到一个未定义VarA
的链接器错误,这真的很令人困惑。VarA
有谁知道这种行为的原因可能是什么?
我使用的是 VS2008,项目是用cmake
. 这可能会导致问题吗?例如,可能存在配置问题吗?我们也经常使用模板,这会导致问题吗?