2010-04-27 142 views
0

我得到了一個編譯錯誤,我不明白。 我有一個h/cpp文件組合,不包含類,但只是定義了一些實用功能。當我嘗試使用在其他類中定義的結構我得到的錯誤:C++編譯錯誤

錯誤C2027:使用未定義的類型的「B :: C」

因此,剝離下來的問題,H-文件看起來像這樣

namespace A { 
    void foo(B::C::SStruct const & Var); 
} 

SStruct的定義是在另一個h文件中的類中,當然也包含它。

namespace B { 
    class C { 
     public: 
     struct SStruct { }; 
    }; 
} 

奇怪的是,我可以在其他類中使用這個結構精細,它只是似乎是與此相關的H-文件,該文件只包含實用功能。 我在這裏錯過了什麼? 謝謝!

回答

5

修正缺少分號等在此之後編譯:

namespace B { 
    class C { 
     public: 
     struct SStruct { }; 
    }; 
} 
namespace A { 
    void foo(B::C::SStruct const & Var); 
} 

顯然,如果兩個命名空間的順序進行切換,這是行不通的。可能你是#錯誤的順序包括你的標題。如果這是錯誤,那就是糟糕的設計 - 你不應該讓頭部順序在代碼中起作用。

+0

謝謝。對不起,我忘了在我原來的帖子中提到這個,它實際上是公開的。 – clamp 2010-04-27 15:47:02

+0

是的,它似乎是順序。謝謝!我將需要重新考慮我的h文件的組織結構。 – clamp 2010-04-27 16:03:33

0

我假設你的意思是「C類」,而不是「C類」。

struct SStruct對C類是私有的(私有是類成員的默認可見性)。

因此,它不在C類及其朋友之外,它不包括A :: foo()。

+0

謝謝。對不起,我忘了在我原來的帖子中提到這個,它實際上是公開的。 – clamp 2010-04-27 15:46:25

0
Class C { 
     struct SStruct { }; 
    } 

==>

class C { 
public: 
     struct SStruct { }; 
    }; 
+0

謝謝。對不起,我忘了在我原來的帖子中提到這個,它實際上是公開的。 – clamp 2010-04-27 15:45:52

0

你的類缺少定義後一個分號。應該是:

namespace B { 
    class C { 
     public: 
     struct SStruct { }; 
    }; // <=== Here 
} 
+0

是的,謝謝,但這不是問題 – clamp 2010-04-27 15:50:25