2017-02-17 65 views
0

我负责实施课程。我已经提供了一个名为“pro.h”的.h文件,我不能以任何方式改变。 .h文件只包含函数原型,没有定义。类块后,它有一个为什么.hpp文件将包含在.h文件中?

#include "pro.hpp" 

我应该创建一个file.hpp添加的定义虽然,我很困惑,因为定义通常包含在.cpp文件不是另一个头文件。你为什么认为这会完成?我是否会将这些定义的格式设置为相同的原因,以便在.cpp文件中执行此操作,或者重写头文件以包含定义(这看起来效率不高)。

+2

“.h”文件,“.hpp”文件或任何其他文件没有什么不可思议的。编译器只是按照指示处理所有'#inc'文件。您的文件扩展名可以是.h,.hpp,.xyz或.hjgiurejkcxkj。它仍然是有效的C++,只要包含逻辑的文件包含有效的C++代码即可。 –

+0

谢谢,我只是想确保编译器不会因为扩展名而以不同的方式进行编译。 –

+0

@AlessandroLorusso你(通常)并不自己编译头文件,所以没有问题。 –

回答

1

你的老师希望你实现一个模板类。关于模板的事情是,他们需要使用正确的模板类型来实例化,这意味着在你知道它的类型之前,你不能创建二进制文件。这就是为什么实现通常写在头文件中的原因。看看f.e. here ...

如果你是新的模板,只问叔叔google或蚂蚁wiki

地址:

简单地说......当你在foo.cpp有事,它会被转换为二进制文件,相应的头文件foo.hpp可以作为我可以从其他代码中使用的二进制文件中的函数的参考。重要的是这个二进制文件不会(真的)改变了。

另一方面,模板不能转换为二进制文件,直到您知道它将在哪种类型上运行...如果您使用模板类一次用int,而另一次用vector<double>作为模板参数,生成的二进制文件可能会非常不同......因此,只有在知道类型后,才能将代码编译到二进制文件中,因此您需要传递代码(在头文件中)而不仅仅是函数原型。

希望这是明确的。毕竟在这里的早上几乎是3点。如果不是,this应该是非常全面的。

+0

这确实帮了很大忙,谢谢 –

相关问题