2012-02-11 69 views
2

我在嵌套命名空間中轉發聲明時遇到問題。我在嵌套命名空間中爲類或結構放置了前向聲明,並且當我試圖在該命名空間的父項中使用它時,我得到一個錯誤。我不知道該怎麼辦。嵌套命名空間中的轉發聲明

這是代碼的樣子:

#include "Data\Types.hpp" 

namespace GameEngine 
{ 
    class Console 
    { 
    public: 
     class Renderer : public RenderComponent2D 
     { 
     public: 
      Renderer(Console*, const GameEngine::DataProcessing::FontData*); 
//... 

和數據\ Types.hpp:

namespace GameEngine 
{ 
    namespace DataProcessing 
    { 
     struct FontData; 
//... 

和MinGW的錯誤給我的是:

'FontData' in namespace 'GameEngine::DataProcessing' does not name a type 

我感謝這個問題的任何幫助或建議。

+0

試試'const DataProcessing :: FontData *'。 – 2012-02-11 23:12:19

+2

發佈重現問題的小程序。 – 2012-02-11 23:16:09

+1

[適用於我](http://ideone.com/CoOw1)。 – 2012-02-12 02:32:55

回答

1

可能是方法聲明中的問題。你已經GameEngine命名空間裏:

namespace GameEngine 
{ 
    class Console 

但在聲明中,您使用此命名空間太:

Renderer(Console*, const GameEngine::DataProcessing::FontData*); 

嘗試沒有GameEngine:

Renderer(Console*, const DataProcessing::FontData*); 
2

我最近,轉身也有類似的問題成爲一個未封閉的命名空間,例如

namespace A { 
    namespace B { 
     class C {}; 
// failed to close both namespaces properly here 

有什麼讓我失望的是,未封閉的命名空間實際上是包含在我的cpp文件中的輔助文件。嘗試在你的頭文件中查看它們是否有任何未封閉的名稱空間。