2011-11-29 140 views

回答

3

B必須定義你在A::myData的聲明中使用它之前:

class A 
{ 
    class B 
    { 
    public: 
     struct data 
     { 
      int number; 
     }; 
    }; 

    B::data myData; 
}; 
+0

好的。我認爲可能有一種方法讓編譯器在實際定義它之前知道B :: data是一個結構,類似於聲明類B; – user974967

+0

即使可以,您仍然無法使用它來定義數據成員:類型必須是_complete_。 –

+0

James是正確的,在完全定義它之前可以使用類型的唯一方法是作爲指針,因爲指針佔用固定空間 –

3

我認爲你所需要做的就是把類定義放在變量聲明的前面。編譯器不知道里面是什麼class B,只知道它的存在,直到它遇到的類的實際定義

0

使用範圍說明符,並確保您的文件中定義後不使用,直到類型:

class A 
{ 
    class B 
    { 
    public: 
     struct data 
     { 
     int number; 
     }; 
    }; 

    B::data myData; 
}; 

另外,注意前瞻性聲明中除非你只是使用指向類的指針,否則不行。當您像創建類一樣創建類的實例時,需要立即爲其提供該類的定義。