C++类对象文件何时编译

C++ When does class object file get compiled?

本文关键字:何时 编译 文件 对象 C++      更新时间:2023-10-16

我是C++的新手,很难理解创建和编译类对象文件的步骤。

假设我创建了3个文件:1。类头文件2。类cpp文件(存在成员函数定义)3。主cpp文件

/*当我运行包含类头文件(比如"#include-class.h")的主cpp文件时,什么时候编译类cpp文件、创建对象文件并链接?

我遇到困难的原因是,从编译器的角度来看,当它看到主cpp文件时,只有头定义,没有成员函数定义。但是,即使在类头文件中,也不包含类cpp文件。当类cpp文件在类头文件和主cpp文件中都没有被引用时,编译器如何知道要运行它?*/

让我澄清一下我的问题。//也许我说了一些我甚至都不懂的话哈哈。

所以,基本上,我试图在say‘main.cpp’文件中运行一个main函数。此"main.cpp"文件包括"class.h"标头(包括"class/h")。如果成员函数未在"class.h?"中声明,编译器将如何执行标头文件中定义的函数我的所有成员函数声明都在"class.cpp"中,它不包括在"class.h"或"main.cpp"中

我怀疑您使用的是IDE,因为您提到运行cpp文件-编译器不知道如何运行任何东西。

IDE为您管理这些依赖关系
当您按下"Run"时,IDE将决定项目中哪些文件需要编译,编译完成后,它将把所有对象文件链接在一起
如果编译和链接成功,IDE将启动可执行程序。

如果您想更好地理解这些概念,请离开IDE,在命令行上进行一段时间的所有编译和链接
(这并不复杂,只是乏味。)

您需要编译每个.cpp文件。标头;.h文件仅用于声明,这意味着让编译器确定您是否正确使用了函数。每个.cpp都包含代码,并且应该转换为机器代码(.o文件)。在完成所有这些编译之后,您需要将它们链接以构建可执行文件,以便使用的每个函数都包含在同一个文件中。以下命令可以帮助您(使用g++编译器):

$ g++ -c myclass.cpp            // produces the myclass.o file
$ g++ -c main.cpp               // produces the main.o file
$ g++ -o myapp main.o myclass.o // produces the myapp executable

为了便于理解,这过于简单化了。