理解如何编译和正确链接多个C++文件 我想编写一个包含多个C++文件的基本程序,然后用G++ + /P>编译程序从Ubuntu终端编译。 main.cpp 其他.cpp

理解如何编译和正确链接多个C++文件 我想编写一个包含多个C++文件的基本程序,然后用G++ + /P>编译程序从Ubuntu终端编译。 main.cpp 其他.cpp,c++,ubuntu,compilation,g++,C++,Ubuntu,Compilation,G++,首先,这是行不通的。我得到以下错误: /tmp/ccXYALau.o: In function `test()': other.cpp:(.text+0x0): multiple definition of `test()' /tmp/ccCIj4co.o:main.cpp:(.text+0x0): first defined here collect2: error: ld returned 1 exit status 即使我显然没有两次定义测试?问题1 第二,我必须把 #include &

首先,这是行不通的。我得到以下错误:

/tmp/ccXYALau.o: In function `test()':
other.cpp:(.text+0x0): multiple definition of `test()'
/tmp/ccCIj4co.o:main.cpp:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status
即使我显然没有两次定义测试?问题1

第二,我必须把

#include <iostream>
using namespace std;
在other.cpp中,main.cpp代替了更有意义的内容。这是因为出于某种原因,即使我将iostream include和std名称空间放在main.cpp的顶部,other.cpp也无法识别iostream命令cout,endl。我认为包含语句只将C++文件内容放在包含语句中。正确的做法是什么?为什么不起作用?问题2


最后,一般来说,如果我的项目变得更复杂,包含更多的文件,那么编译所有这些文件并链接它们是如何工作的?难道所有的include不应该都在main.cpp中吗?编译它们的过程是什么?问题3

当您包含一个文件时,您可以有效地将该文件的内容复制/粘贴到包含行。因此,是的,您在程序中包含了两次方法测试


通常只包括头文件。这些通常定义了方法的签名。对于.cpp文件中方法的主体/实现。

使用头文件。我认为.cpp和.h之间没有实际区别。或者,这真的只是考虑到他们都执行C++代码吗?可能的副本和另一个:源文件和头文件按惯例是不同的。它们有不同的功能。我了解所有的事情,除了在这种情况下,我如何将它包含两次?我在other.cpp中定义了它,并在main.cpp中包含other.cpp。第二个定义在哪里?在main.cpp中嵌入了other.cpp,并且在编译时也在命令行中添加了它。哦,所以我应该只编译main.cpp?不应该包含.cpp文件。是的。这是解决问题的一种方法。
g++ main.cpp other.cpp
/tmp/ccXYALau.o: In function `test()':
other.cpp:(.text+0x0): multiple definition of `test()'
/tmp/ccCIj4co.o:main.cpp:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status
#include <iostream>
using namespace std;