2

我正在开发一个大型 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. 这可能会导致问题吗?例如,可能存在配置问题吗?我们也经常使用模板,这会导致问题吗?

4

2 回答 2

0

我还没有发现错误,但是现在已经避免了这个问题,因为大部分第三方代码已经更改并且不再出现错误。

于 2012-06-19T08:56:21.113 回答
0

为了消除由于多次循环调用而发生的多个定义错误,我建议您应该做的第一件事是编辑头文件以包含以下宏(无论您的情况如何)给每个文件一个唯一的名字

#ifndef CAR_HPP
#define CAR_HPP
class Car 
    {
    public:
    ....
    protected:
    ....
    };
#endif
于 2012-06-11T17:53:11.620 回答