2011-11-29 138 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; 
}; 

另外,注意前瞻性声明中除非你只是使用指向类的指针,否则不行。当您像创建类一样创建类的实例时,需要立即为其提供该类的定义。