2017-01-01 43 views
1

我正在使用其他人編寫的庫,它基於C++的C++用法 - 我想 - 。在頭文件或源文件中使用的所有內容都採用<>而不是「」形式,即使它們不是標準庫文件。我的編譯器無法識別它們,並返回如何使用<>代替「」包括

問題的一個例子是下面的頭內部錯誤「找不到文件」:

#ifndef _ga_ga_h_ 
#define _ga_ga_h_ 

// Make sure that we get the configuration into each of the galib components 
// that will be used. 
#include <ga/gaconfig.h> 

// These are the headers for all of the genetic algorithm classes. 
#include <ga/GASimpleGA.h> 
#include <ga/GASStateGA.h> 
#include <ga/GAIncGA.h> 
#include <ga/GADemeGA.h> 
#include <ga/GADCrowdingGA.h> 

// Here we include the headers for all of the various genome types. 
#include <ga/GA1DBinStrGenome.h> 
#include <ga/GA2DBinStrGenome.h> 
#include <ga/GA3DBinStrGenome.h> 
#include <ga/GABin2DecGenome.h> 

我包括使用的#include「GA我的計劃裏面這個頭。 h「,但是很難在庫中的每個頭文件/源文件中進行更改。

有沒有辦法讓編譯器使用<>好像它們是「」? 我試圖從項目屬性(我使用Visual Studio)添加「添加包含目錄」的路徑,許多包含的錯誤消失了,但大約30個持續。奇怪的是,他們在一個名爲「c1xx」的文件中,但我沒有該文件!

感謝,

+0

您可以嘗試在編譯器的標頭搜索路徑中添加這些標頭的路徑。如果它能工作或者沒有實現定義。 – Unimportant

+0

如何設置或添加到包含文件的默認搜索路徑取決於編譯器和環境。使用GCC和Clang從命令行使用'-I'(大寫字母i)選項。 –

+0

你使用什麼編譯器? – pstrjds

回答

4

定義是有點在於<>用於「系統」頭文件,通常在地點找到像USR包括(在類Unix系統)和「用於本地頁眉/ /」文件。編譯代碼時,可以指定包含頭文件的其他目錄的位置,例如使用GCC時使用-I選項。請檢查您的編譯器文檔以瞭解所需設置

因此,例如在Linux和GCC上,如果你的「ga」目錄在/ usr/local/include/ga中,你可以使用cc -I/usr/local/include。

+0

並且它與c或C++無關,那麼您可以使用''''而不是'<>碼。雖然名稱修改可能是鏈接時的問題。 – danishansari

+0

謝謝你的回答。對不起,我是小白,請你再澄清一點?所以在我的源文件中,我包含如下文件: – Peet

+0

#include「ga \ ga.h」,並在該文件中,所有這些包含<> ...所以我應該像這樣包含它:#include「 - 升\ GA \ ga.h「? – Peet

-2

如果你在命令行:

echo | gcc -v -E -x c++ - 

您將得到默認的輸出包括目錄中C++。這些是內置系統包含的搜索路徑。

如果使用g++ -I/some/dir -o foo foo.cpp進行編譯,則需要爲編譯添加一個附加包含搜索路徑(/some/dir)。

上述位置的標題可以通過包括指令#include <header>找到。 #include "header"指令也可以在這些位置找到標題,但它們與以下情況更相關。

當你做#include "header",你的編譯器將首先嚐試尋找「頭」相對於foo.cpp目錄,如果它包括它,儘管在搜索路徑foo.cpp目錄是與否。如果它沒有找到它,它會嘗試在包含搜索路徑中查找。因此,這一個與更多與特定.cpp文件關聯的標題更爲相關,並且您不希望將其他包含搜索路徑添加到編譯中,或者如果您希望使用包含相對路徑的include指令。

所以如果你使用#include <header>header必須在一些包括搜索路徑,系統或/some/dir-I標誌。如果headerfoo.cpp相關,但不在搜索路徑中,則編譯將失敗。

如果使用#include "header"header不在任何包含搜索路徑中,仍可以找到相對於foo.cpp的位置。

+2

問題是關於Visual Studio,而不是gcc。而且gcc不能正確處理C++;爲此你應該使用g ++。 –

+0

@PeteBecker喲C++專家。我在'gcc -v -E -x C++ -'上使用了gcc,這對於得到C++的頭文件列表是正確的,並且在其他地方使用了g ++。 –

+1

@PeteBecker這個問題沒有被標記爲視覺工作室,他正在使用它。我所描述的內容也適用於clang(順便說一下,它的操作方式與獲取標題列表相同,您使用了clang,而不是clang ++)。如果他將它應用於msvc,這個想法也是一樣的。 –

相關問題