C++ 从外部类访问嵌套的内部类结构

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 {

在上面的代码中,如何在类a中声明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;
};