[英]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.