2013-07-29 43 views
0

我想一個的#include指令添加到我的A.cpp文件和頭文件了Bh是文件夾兩層起來(例如,如果源文件是* E:\ A \ B \ C \ D \ E \ F \ G \ H *,頭文件在* E:\ A \ B \ C \ F *,當然名字會比這個長很多) ,所以我打在Visual Studio 2010年這一令人困惑的聲明:爲什麼這會令人困惑#include「.. .. [等等]」聲明有效?

#include"../../ 

而在VS 10智能感知功能顯示了文件的列表,並了Bh就在裏面!我不知道這個說法是否正確,但我認爲這是有問題的。你能告訴我這是錯的還是正確的?你能給我一個更好的解決方案嗎? 非常感謝。

+1

你爲什麼覺得有什麼問題?所有這些對我來說都是正確的。 –

+0

也許是因爲它很脆弱? – Jiminion

+1

它如何比編譯器傳遞一個'-I'標誌(或任何MSVC等價物)更脆弱? –

回答

2

爲什麼它不工作?你有沒有完成cd ../../mydir,並檢查了這是什麼?這是相同的。 ...指向Windows和Linux中的特殊目錄。 .是當前目錄,而..是之前的目錄。因此../../file.h會返回兩個目錄來查找您要查找的文件。畢竟,#include "..."語句的工作方式與文件位於相對路徑。寫庫,你有一個主detail子目錄通常當你將嘗試通過#include "../detail/myfile.hpp"訪問它,而其他庫,如升壓齊齊#include <boost/config/myfile.hpp>

+0

謝謝你告訴我。這對你很好。 – Blip

0

我認爲最好將"-I <INCLUDE_DIR>"參數包含到您的構建中,並且只包含沒有列出目錄的頭文件。這是你告訴編譯器和鏈接器尋找你的頭文件的地方。

+0

我怎樣才能包括這個?我可以使用VS 2010命令提示嗎? – Blip

+0

轉到您項目的屬性,那裏有一個包含選項。 –

+0

根據Carl Norum發表的評論,我認爲傳遞-I標誌是一個更好的解決方案 – Blip

-1

..\讓你向上移動一個目錄,所以..\..\會移動你兩個目錄。如果你可以假設腳本的位置不會改變,我想這很好。但是,如果您將腳本移到另一個驅動器上,您將遇到麻煩。包括E:\ A \ B \ C \ D \ E \ F \ B.h可能會更好,而不是爲了將來證明自己。

+1

當問題是關於C++時,你會說「腳本」。我無法想象什麼樣的程序員會建議硬編碼本地包含路徑,而不是使用相關的相對路徑。 – DanielKO

+0

我想我可以從Windows資源管理器粘貼這個文件位置,但是如果我改變位置,它將需要很大的努力來改變這個位置的所有引用。但我會感謝你的建議。 – Blip

+0

@DanielKO我只是一般性地講,因爲這可能適用於任何數量的語言。基於這個問題,我們不知道項目的範圍。我承認我認爲這是基於問題本身的小規模,這是我的不好。我顯然不會在生產環境中提倡這一點,但是在小範圍內有什麼危害。 – LoganGoesPlaces