2010-11-05 157 views
1

我正在使用兩個第三方框架。我想從兩個框架訪問一個新類。在C++中訪問父命名空間

第一框架使用嵌套命名空間像:

namespace space1 { 
    namespace space2 { 
     class 3rdparty{ 
     } 
    } 
} 

第二框架不使用任何名稱空間。 如果我嘗試從使用命名空間的第一個框架中調用我自己的類,那麼我根本無法正確使用它。在最好的情況下,我最終會出現鏈接錯誤。

我的班級是這樣的:

PlugIn_Processor.h:

class PlugIn_Processor{ 
public: 
    //constructor 
    PlugIn_Processor(); 

}; 

PlugIn_Processor.cpp:

#include "PlugIn_Processor.h" 
    PlugIn_Processor::PlugIn_Processor(){ 
}; 

上述第一種使用框架cpp文件看起來是這樣的:

 namespace space1 { 
     namespace space2 { 
      3rdparty::3rdparty{ 
        PlugIn_Processor * plugIn_Processor; 
        plugIn_Processor = new PlugIn_Processor(); 
      } 
     } 
    } 

但是,無論我做什麼,調用構造函數時都會出現鏈接器錯誤。 解決方案是將所有內容放在第三方框架的名稱空間下,但是因爲我想從不同的框架訪問該類,所以我不想將所有內容放在該名稱空間下。 我能做些什麼來解決這個問題?我試過的一切都失敗了。

+0

你能發佈一個會產生鏈接器錯誤的可編譯代碼嗎?只是目前的代碼片段不清楚。 – Poni 2010-11-05 01:44:21

+0

我同意。此外,您是否嘗試在子名稱空間中包含父名稱空間,或者通過它的名稱空間名稱來訪問它? – 2010-11-05 01:46:23

回答

0

要訪問父範圍,使用雙冒號(::)作爲:

class Blah; 
namespace alpha 
{ 
    class Blah; 
} 
namespace bravo 
{ 
     class Blah; 
     // can access outer class as ::Blah 
     // and one from alpha as ::alpha::Blah 
} 

但是請注意,在你的例如下面的代碼不應該編譯:

3rdparty::3rdparty{ 

這實際上是一段代碼?它真的爲你編譯?此外,一定要檢查您是否實際上鍊接到定義了引用類的編譯單元。

+1

謝謝,你是對的。我的編譯器沒有正確鏈接我的資源,因爲它應該。手動修復它,現在一切似乎都很好。 – 2010-11-05 02:04:37

+4

::不訪問父命名空間,它是一個全局命名空間 – ShitalShah 2017-02-10 05:21:05