C++ 从外部类访问嵌套的内部类结构
在上面的代码中,如何在类a中声明data类型的成员变量?我认为您需要做的就是将类定义放在变量声明之前。编译器不知道C++ 从外部类访问嵌套的内部类结构,c++,class,nested,C++,Class,Nested,在上面的代码中,如何在类a中声明data类型的成员变量?我认为您需要做的就是将类定义放在变量声明之前。编译器不知道类B中有什么,只知道它存在,直到遇到类的实际定义为止B必须在声明A::myData中使用它之前进行定义: class A { class B; B::data myData; //Error: incomplete type not allowed. class B { public: struct data {
类B
中有什么,只知道它存在,直到遇到类的实际定义为止B
必须在声明A::myData
中使用它之前进行定义:
class A
{
class B;
B::data myData; //Error: incomplete type not allowed.
class B
{
public:
struct data
{
int number;
};
};
};
使用范围说明符并确保在文件中定义类型之前不使用该类型:
class A
{
class B
{
public:
struct data
{
int number;
};
};
B::data myData;
};
另外,请注意,除非只使用指向类的指针,否则前向声明不起作用。当您创建类的实例时,它需要该类的定义立即可用。好的。我认为有一种方法可以让编译器在实际定义B::data之前知道它是一个结构,类似于声明类B;即使可以,您仍然无法使用它来定义数据成员:类型必须完整。James是正确的,在类型完全定义之前,您可以使用它作为指针,因为指针占用常量space@DanF:或在引用类型中,或作为函数声明中的参数或返回类型,或作为模板参数,或。。。在很多情况下,不完整的类型是可用的。我不知道您可以使用不完整的类型作为返回类型、参数类型或模板参数。你知道的越多!
class A
{
class B
{
public:
struct data
{
int number;
};
};
B::data myData;
};