2015-03-02 87 views
0

我是C++的新手,很难理解获得创建和编译的类对象文件的步骤。C++什么时候编译类对象文件?

比方说,我创建3个文件:1.类的头文件2.类CPP文件(成员函数定义本)3.主要CPP文件

/* 当运行主CPP文件,其中包含的类头文件(比如说“#include class.h”),类cpp文件何时被编译,目标文件是否已创建并链接?

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

让我澄清我的问题。 //也许我说了一些我甚至不理解的东西哈哈。

所以,基本上我试图在说'main.cpp'文件中运行主函数。这个'main.cpp'文件包含'class.h'头文件(包括“class.h”)。当'class.h'中没有声明成员函数时,编译器如何执行头文件中定义的函数?我所有的成员函数声明都在'class.cpp'中,它不包含在'class.h'或'main.cpp'中。

+0

在C++中没有像“类对象文件”AFAIK这样的东西,至少不是特别的。另外,你不“运行cpp文件”。为了理解你的问题,你如何用两个“cpp”文件编译一个项目?因为它们都是相同的,所以如果有类,并不重要,你可以有一个只有一个函数定义的'cpp'。 – luk32 2015-03-02 08:56:39

+0

@ luk32例如:Rectangle.h包含在Rectangle.cpp中,编译Rectangle.cpp并创建Rectangle.obj。我认为这是OP所指的“类对象文件”。 – 2015-03-02 09:00:17

+0

@GrinNare更新(编辑)你的问题添加该评论,并删除该评论。 – 2015-03-02 09:03:58

回答

1

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

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

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

+0

感谢您的回答。正如我所说我是C++的新手,很多东西都是新的。 我想你提到的IDE是我正在使用的'Xcode'。 所以这个程序会将文件传递给编译器,链接目标文件,并为我启动可执行程序,对吗? – GrinNare 2015-03-02 09:08:23

+0

@GrinNare准确。 – molbdnilo 2015-03-02 09:29:48

1

您需要编译每个.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 

这过于简单了便于理解。

+0

感谢您的回答。现在我明白了这个过程。但是,这引出了另一个问题。 是否有来自不同制造商的不同类型的C++编译器,或者它是否为每台计算机都内置? 根据你的评论'g ++编译器',我想这不仅仅是一个编译器,而是很多。 – GrinNare 2015-03-02 09:20:59

+0

是的有很多。最常见的两个是来自微软的'gcc'套件和'Visual',它们都有不同的版本。但是还有很多其他的。 'xcode'使用'llvm/gcc'。 – 2015-03-02 14:41:55

相关问题