我有一个项目,其中包含其他
中包含的几个文件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?
编辑:我确实理解错误的来源,我只是想知道是否有一些解决方法。
答案 0 :(得分:2)
如果您使用QtCreator,那么它应该为项目中包含的每个源文件构建目标文件。
这就是你得到多个定义错误的原因。例如,您有一个内置于Z.cpp
的源文件Z.o
。然后,Z.cpp
中包含B.cpp
,其内置于B.o
。现在,当链接器尝试将Z.o
和B.o
链接到可执行程序时,Z.cpp
中定义的符号将存在于两个目标文件中,从而导致错误
IDE(QtCreator)将确保两个源文件都构建并链接在一起,形成一个可执行文件。不要将#include
任何源文件Class
放入另一个源文件(或更糟糕的是,头文件)。
您包含的标头文件中的类,结构,函数原型和外部变量声明(或应)。非内联类或结构成员函数和函数的实现在源文件中,编译器和链接器将知道如何从目标文件中引用它们。
答案 1 :(得分:1)
这是C ++软件开发的基本内容,我建议你阅读一本关于如何编译和构建程序的介绍。
基本上,在C ++中,你在* .cpp源文件中使用#include * .h文件,
然后编译每个* .cpp文件,
然后链接所有已编译的文件(通常是*上的* .o或Windows上的* .obj)到一个可执行程序,或者一个库,然后在一个程序中链接。
我认为#include *,cpp文件到另一个cpp文件中的做法非常糟糕。
当您使用QTCreator时,您应该有一个已经负责此过程的项目。
答案 2 :(得分:0)
鉴于此处的评论,我添加了自己的头文件。这解决了问题。谢谢你指出这一点。