我正在开发一个大型c ++项目,并改变其他人的代码。在此期间,我收到一个链接器错误,指出引用VarA
是多重定义的。我找到了相应的变量,它已在cpp文件中定义,该文件已直接包含在项目中。我试图在头文件和源文件中转换源文件,但这不起作用。
然后我尝试将变量声明移动到仅包含此变量的新的单独h / cpp中,看起来像:
h-file(aaa.h)
#ifndef AAA_H
#define AAA_H
#include "classAdefinition.h"
extern ClassA VarA;
#endif
cpp-file(aaa.cpp)
#include "aaa.h"
ClassA VarA;
如果我现在在主文件中包含aaa.h
,则链接器错误会将新创建的aaa.obj
添加到错误消息中(例如VarA
也在那里定义)这正是我的意思预期。但是当我删除主文件中VarA
的定义时,我得到一个链接器错误,但是没有定义VarA
,这实在令人困惑。
有没有人知道这种行为可能是什么原因?
我正在使用VS2008,项目是使用cmake
创建的。这可能导致问题吗?例如。可能有配置问题?我们也经常使用模板,这会导致问题吗?
答案 0 :(得分:0)
为了消除因多次循环调用而发生的多重定义错误,我建议您首先要做的是编辑头文件以包含以下宏(无论你的情况如何)给出每个文件都有一个唯一的名称
#ifndef CAR_HPP
#define CAR_HPP
class Car
{
public:
....
protected:
....
};
#endif
答案 1 :(得分:0)
我没有发现错误,但现在避免了问题,因为大多数第三方代码已经更改,错误不再发生。