2012-01-19 77 views
1

我對編程感興趣,特別是我熱衷於學習的C++,雖然在我研究過的所有課本或外部鏈接之外,我似乎無法找到它。C++包含一個來自外部命名空間的類

在這裏。

如果我有兩個類(類A & &類B)

A類具有名稱空間A_NS; B類有一個命名空間B_NS;

這兩個類都位於國外的文件夾

A類 - > fileA.h(FolderA) B類 - > fileB.h(FolderB中)


我的問題是:在 類A,我怎麼能#include<B_NS/fileB.h>

我想引用我的fileB.h通過一種通用的接口?這是我在這裏使用的命名空間嗎? 我不想使用文件夾名稱,例如<folderB/fileB.h> 因爲實際上這個文件夾是幾個目錄下來的。

我只是不知道如何包含它,我想知道是否命名空間可以做到這一點,因爲我有不同的目錄中的文件數量,我想在一種常見的名稱下耦合,如果這是有道理的^^

我很抱歉,這是我在Stackoverflow上的第一篇文章,我發現很難清楚地說明我的問題,但如果有人可以請提供一些幫助,我會非常感激。

+4

指定您的編譯器和操作系統可能會有所幫助。 –

+0

包含目錄選項你正在尋找什麼? –

+0

我不認爲你的意思是「命名空間」。 –

回答

4

我不希望使用的文件夾名稱

這是編譯器特定的,這可能是爲什麼你的課本不包括,但所有的編譯器都放在一個目錄的一些方法在包含路徑上。與海灣合作委員會,你會使用-I選項:

g++ module.cpp -I../headers 

命名空間是從文件路徑模塊/頭完全獨立的。

+0

我看到了,謝謝你的信息larsman。 「命名空間完全獨立於文件路徑到模塊/頭文件。」 < - 這真的爲我清除了:)謝謝 –

1

一個類沒有名稱空間,但包含在名稱空間中。 包含在名稱空間中的類對#include指令沒有影響,以包含包含該類的頭文件。

編譯器具有開關,允許您在查找#include指令中的文件時指定要搜索的文件夾。

例如:

C:\ folderA \ ClassA.h

C:\ FolderB中\ ClassB的。^ h

#include <ClassA.h> 
#include <ClassB.h> 

int main() 
{ 
    return 0; 
} 

編譯器開關-I是很常見的編譯器:

cl.exe main.cpp -I C:\folderA -I C:\folderB 
+0

謝謝hmjd對於這個例子,我看到我現在是多麼的錯了,對不起那個 –

0

要指定一個額外的include目錄(即告訴編譯器到哪裏尋找包括文件,除了它已經如此)取決於它的編譯器你使用:

GCC

g++ -I/path/to/include file.cpp 

CL(Visual Studio的編譯器)

cl file.cpp -I C:/path/to/include 

您也可以設定爲在Visual Studio中的特定項目的選擇此選項。

+1

謝謝安東尼 - 我已經把它們加入了一個不錯的目錄名稱「common」 ^^所有工作正如我現在想要的:) –

0

我猜想#include "file.h"#include <file.h>的區別的一些背景也可能有用。

如果您定義了#include "file.h",它將開始查找相同的目錄,然後查找包含路徑,而#include <file.h>將搜索包含路徑。如@larsmans指出的那樣,包含路徑是通過編譯器特定的方式添加的,但是如果將項目的根添加到包含路徑中,則可能會對您起作用。

我將所有頭文件保存在一個單獨的包含文件夾中include\project\file.h然後我只將include添加到我的包含路徑中。然後我將#include <project\file.h>包含在頭文件中,這裏的project目錄將作爲頭文件的命名空間。這將更加清晰 - 如果您跨項目混合匹配頭文件(您必須執行此操作) - 哪個頭文件屬於哪個文件夾,而且您不必擔心會混合可能共享相同文件名的頭文件。