繁体   English   中英

Main.cpp中的头文件包含有约束吗?

[英]Are There Constraints on Includes of Header Files in Main.cpp?

我已经设法解决了我自己在这里解释的问题。 我不明白的是背后的原因。 基本上,在将一个工作程序拆分为一个makefile之后,所有包含项都放在正确的位置,一个特定的对象构造调用停止工作。

解决方案最终是将#include“ filename.h”在main.cpp文件中的10个左右#includes列表中上移。

这是否意味着存在某种约束? 我没有意识到,并且自从进行此更改以来,现在排在最后的另一个标题仍然可以正常工作。

引擎收录

编辑:应一些用户的要求,我添加了对我产生错误的最起码的代码。 不过,它仍然超过300行...代码顶部的注释说明了如何发生错误,但是需要将代码拆分为单独的文件并使用makefile。

确实存在限制:一个包含文件可能需要在另一个包含文件中定义的类。 因此,您必须确保以正确的顺序包含文件。

例:

//======== File A.h ==========
class A {
   ...
};

//======== File B.h ==========
class B : public A {   // class B needs A to be defined first !!
   ...
};

//======== File main.cpp that works ========
#include "A.h"
#include "B.h" // ok:  relies on A and A is already defined
... 

//======== File ouch.cpp that fails ========
#include "B.h" // not ok:  relies on A but A is not yet defined !!
#include "A.h"
...

但是幸运的是,有一些避免这种陷阱的好的做法:在标头中使用include防护,在任何标头中,都应预防性地包括由于依赖关系而需要的其他标头。 这里有一篇很好的文章对此进行了解释。

没有内在的约束,没有。 但是,如果程序编写不当,则包含顺序可能很重要。 这通常归结为#include语句未正确处理标头之间的依赖关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM