2016-12-30 25 views
3

我在我的C++程序中使用外部庫。這個庫有一個名爲「Common.h」的fie。不知道這個文件,我也在我的程序中創建了一個「Common.h」。在頭文件中使用編譯器標誌「#pragma once」我可以確保這兩個文件都可以包含在編譯中。但是,我意識到當我在程序中調用我的「Common.h」時,預處理器錯誤地包含了來自外部庫的「Common.h」,這會破壞編譯。有沒有像「命名空間」這樣的選項允許我包含正確的文件。我發現它非常困難,因爲我們可能不(實際上不需要)意識到外部庫中的所有文件。如何在C++項目中包含具有相似名稱的頭文件

+0

的唯一方法,而使用相同的名稱來區分它們是由包括部分或全部文件路徑的包含指令。 –

+3

您可以將標題存儲在項目子文件夾和'#include「my_project/Common.h」'中。 TBH圖書館應該已經爲自己做了。也許你編譯器的include標誌設置不正確? – Galik

+0

讓文件夾名稱爲頭文件的名稱空間。 –

回答

8

一般程序有幾個所謂的包括路徑查找頭文件。看起來你已經包含了包含你的「Common.h」文件以及庫頭目錄的路徑。對我來說,完美的解決方案似乎除去包含的庫文件路徑,並使用明確的相對路徑,如:

#include "mylib/include/Common.h" 
+0

不應該忘記#include <>和#include「」具有不同的優先級。一個使用<>在平臺定義的文件夾(特定於實現)中查找,其他 - 首先在項目文件夾中,應該使用非遞歸部分路徑(有實現細節,但主要是因爲大量不同的平臺) – Swift

1

你可以簡單地重命名「COMMON.H」文件,然後包括

+0

請參閱我對yugr的回覆 – Soo

相關問題