结构内部结构:“非法引用非静态成员”错误

Per*_*tto 1 c++ constructor struct

我需要在struct内部创建一个struct。如何正确编码构造函数?我需要分别为A和B创建两个构造函数,还是可以像下面的示例一样仅为A使用一个“外部”构造函数?我的尝试导致C2597错误。

struct A
{
    struct B
    {
        unsigned n;
        int* d;
    };

    A(unsigned c)
    {
        B::n = c; // C2597
        B::d = new int[c]; // C2597
    }
};
Run Code Online (Sandbox Code Playgroud)

Dmi*_*don 5

您需要使成员成为B静态成员(但在这种情况下,对于Windows,对于整个程序或dll,将只有一个值):

struct A
{
    struct B
    {
        static unsigned n;
        static int* d;
    };

    A(unsigned c)
    {
        B::n = c;
        B::d = new int[c];
    }
};
Run Code Online (Sandbox Code Playgroud)

或创建以下实例B

struct A
{
    struct B
    {
        unsigned n;
        int* d;
    };

    A(unsigned c)
    {
        B b;
        b.n = c;
        b.d = new int[c];
    }
};
Run Code Online (Sandbox Code Playgroud)

如果您想A包含B-这就是您需要做的:

struct A
{
    struct B
    {
        unsigned n;
        int* d;
    } b;

    A(unsigned c)
    {
        b.n = c;
        b.d = new int[c];
    }
};
Run Code Online (Sandbox Code Playgroud)