c ++包括.cpp:避免多个定义错误

时间:2016-12-09 09:28:56

标签: c++

我有一个项目,其中包含其他

中包含的几个文件
A.h --> B.h means A.h is included in B.h

有许多内容,如

A.h --> X.h
B.h --> A.h
B.h --> X.h

一切正常。现在我遇到的问题是我需要包含一个cpp文件(不是我的文件,不能用它来改变任何东西)。 编辑:此.cpp没有相应的.h文件 一旦我做了像

这样的事情
Z.cpp --> B.h

我收到多个声明的编译器错误。 我也试过

Z.cpp --> B.cpp

类似的结果,只是更少的错误(B.h包含在许多其他.h文件中)

我如何包含此.cpp?

编辑:我确实理解错误的来源,我只是想知道是否有一些解决方法。

3 个答案:

答案 0 :(得分:2)

如果您使用QtCreator,那么它应该为项目中包含的每个源文件构建目标文件。

这就是你得到多个定义错误的原因。例如,您有一个内置于Z.cpp的源文件Z.o。然后,Z.cpp中包含B.cpp,其内置于B.o。现在,当链接器尝试将Z.oB.o链接到可执行程序时,Z.cpp中定义的符号将存在于两个目标文件中,从而导致错误

IDE(QtCreator)将确保两个源文件都构建并链接在一起,形成一个可执行文件。不要将#include任何源文件Class放入另一个源文件(或更糟糕的是,头文件)。

您包含的标头文件中的类,结构,函数原型和外部变量声明(或)。非内联类或结构成员函数和函数的实现在源文件中,编译器和链接器将知道如何从目标文件中引用它们。

答案 1 :(得分:1)

这是C ++软件开发的基本内容,我建议你阅读一本关于如何编译和构建程序的介绍。

基本上,在C ++中,你在* .cpp源文件中使用#include * .h文件,
然后编译每个* .cpp文件,
然后链接所有已编译的文件(通常是*上的* .o或Windows上的* .obj)到一个可执行程序,或者一个库,然后在一个程序中链接。

我认为#include *,cpp文件到另一个cpp文件中的做法非常糟糕。

当您使用QTCreator时,您应该有一个已经负责此过程的项目。

答案 2 :(得分:0)

鉴于此处的评论,我添加了自己的头文件。这解决了问题。谢谢你指出这一点。