2014-01-22 24 views
0

比方說,我有一個名爲ModuleObject的類型,它在另一個文件中聲明,並且thistype位於Module名稱空間中。然後讓我們說我有另一個文件使用該命名空間子句來引入額外的名字爲命名空間,就像這樣:C++命名空間子句函數是否像使用子句那樣解決了ambigious範圍?

namespace Module { 
    .... 

當我提到這第二個文件中的ModuleObject類型,這是正確的?或者,由於我聲明瞭「命名空間模塊」,範圍會自動由編譯器確定嗎?

ModuleObject mo; 

我不確定命名空間子句的功能是否像使用命名空間子句一樣,因爲它將範圍解析爲已聲明的命名空間。

+0

如果您之前在同一翻譯單元的名稱空間Module中聲明瞭'ModuleObject',那麼它將引用'Module :: ModuleObject'。當編譯器看到「ModuleObject」時,它執行非限定名稱查找。它會查看當前命名空間('Module')並查找「ModuleObject」,因此它會停止遞歸名稱空間搜索並使用「Module :: ModuleObject」。 – Simple

回答

0

範圍將由編譯器決定 - 只要你在第二個包括原始文件,例如。

// ModuleObject.h 

namespace Module 
{ 
    class ModuleObject 
    { 
    }; 
} 

// SecondFile.h 

#include "ModuleObject.h" 

namespace Module 
{ 
    ModuleObject obj; 
} 

順便說一句,在詢問SO之前嘗試真的很難嗎?