class A
{
class B;
B::data myData; //Error: incomplete type not allowed.
class B
{
public:
struct data
{
int number;
};
};
};
在上面的代码中,我该如何在类A中声明类型数据的成员变量?从外部类访问嵌套的内部类结构
class A
{
class B;
B::data myData; //Error: incomplete type not allowed.
class B
{
public:
struct data
{
int number;
};
};
};
在上面的代码中,我该如何在类A中声明类型数据的成员变量?从外部类访问嵌套的内部类结构
B
必须定义你在A::myData
的声明中使用它之前:
class A
{
class B
{
public:
struct data
{
int number;
};
};
B::data myData;
};
我认为你所需要做的就是把类定义放在变量声明的前面。编译器不知道里面是什么class B
,只知道它的存在,直到它遇到的类的实际定义
使用范围说明符,并确保您的文件中定义后不使用,直到类型:
class A
{
class B
{
public:
struct data
{
int number;
};
};
B::data myData;
};
另外,注意前瞻性声明中除非你只是使用指向类的指针,否则不行。当您像创建类一样创建类的实例时,需要立即为其提供该类的定义。
好的。我认为可能有一种方法让编译器在实际定义它之前知道B :: data是一个结构,类似于声明类B; – user974967
即使可以,您仍然无法使用它来定义数据成员:类型必须是_complete_。 –
James是正确的,在完全定义它之前可以使用类型的唯一方法是作为指针,因为指针占用固定空间 –