2016-01-21 25 views
0

這肯定是一個不好的問題,我很抱歉浪費你的時間,但我找不到任何解決方案(我在網上搜索了一下,但什麼也沒找到)。#include在其他文件中看不到標題

我在Visual Studio 2013中有一個控制檯應用程序項目,我有很多文件夾,我把各種.h和.cpp文件。在這些文件中,我使用命名空間來分組類。

問題是我不能包含當前.cpp或.h文件中父目錄中的標頭。

例如,我在命名空間A/B/C中包含的路徑/ a/b/c下的Hello類和位於命名空間A中的/ a/b /下的Hi類/ B。在我的情況下,Hello類不會「看到」類Hi,但是類Hi可以「看到」類Hello。另外,如果我在文件夾a/d /中有名稱空間A/D的Bye類,則類Bye不會「看到」類Hi和Hello,反之亦然。 我的意思是「沒有看到」是#include沒有找到標題,而當我使用「using namespace ...」時,沒有父命名空間。

P.S.我希望我的英語是可以理解的(這不是我的母語),我剛剛寫的是清楚的。

+0

您是否設置了項目包含目錄? '屬性 - > VC++目錄 - >常規 - >包含目錄' – NathanOliver

+0

你也可以在你的包含中使用相對路徑名。 – molbdnilo

+0

請注意,在C++中使用多個和嵌套的命名空間不是很常見,特別是不使用命名空間層次結構「鏡像」目錄層次結構。 (並且在你決定移動文件時重命名命名空間根本就沒有趣味。) – molbdnilo

回答

0

我找到了解決問題的辦法。我在#include字符串「../../」中用作前綴,然後我可以將所有文件包含在我的目錄中。我不知道這是否是最好的事情,但它工作。

0

在解決方案資源管理器窗口中。右鍵單擊您的項目並從菜單中選擇「屬性」。

在C/C++ - >常規設置的第一個字段是「附加包含目錄」

這是你的編譯器加載包含文件添加路徑。

當編譯器遇到#include語句時,它會嘗試打開指定的文件。如果該文件是絕對路徑,則它只會嘗試從該特定的絕對路徑加載。

如果文件是相對路徑,它會嘗試從正在編譯的文件的目錄中首先加載。如果在c/cpp文件所在的文件夾中找不到該文件,編譯器將在其「Include Directories」列表中查找每個路徑以查找該文件。

在Visual Studio中,默認情況下,'其他包含目錄'基於當前項目目錄。您明顯可以使用絕對路徑和/或變量指定任何您想要的內容。

爲了您的例子中,你可能要包括目錄類似:

a/b;a/b/c;a/d

+0

我用它,並添加了以下內容:「$(SolutionDir)src \ utils \」和「$(SolutionDir)src \ graphics \」。在第一個目錄中我有一個Util.h和Util.cpp。我再次看不到它在第二個目錄中的Graphics.h中。我嘗試使用#include「src \ utils \ Utils.h」並進行編譯,但它引發了一個致命錯誤(「無法打開包含文件:'src \ utils \ Utils.h':沒有這樣的文件或目錄」)。 – Aerdna