簡體   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