C ++ Инициализировать вложенную структуру в списке инициализации конструктора? - PullRequest
0 голосов
/ 04 января 2019
  struct B
  {

    int hh;
    int ii;
  };          

  struct A
  {
    B b_memberVar;
    void *p_data;
  };

  struct C
  {
    A array[13];
    int bb;
    int cc;
    int dd;
    int ee;
    int ff;
    int gg;
  };

  struct D
  {
    C c_memberVar;
    int aa;
  };

  class XYZ
  {
    XYZ();
    D m_DMemberVar;
    int zz;
  }

  XYZ::XYZ():
    m_DMemberVar(
    ({{{
            {{0,0},nullptr},
            {{0,0},nullptr},
            {{0,0},nullptr},
            {{0,0},nullptr},
            {{0,0},nullptr},
            {{0,0},nullptr},
            {{0,0},nullptr},
            {{0,0},nullptr},
            {{0,0},nullptr},
            {{0,0},nullptr},
            {{0,0},nullptr},
            {{0,0},nullptr},
            {{0,0},nullptr}
            },0,0,0,0,0,0},0}),
            zz(0)
    ){}

Как мне инициализировать вложенную структуру, которая является переменной члена класса, в списке инициализации конструктора? Я попытался использовать много вложенных {}, как показано в примере выше, но это привело к синтаксическим ошибкам. Ошибки дают "ожидаемое выражение" и "ожидаемое выражение") ""

1 Ответ

0 голосов
/ 04 января 2019

Что ж, у вас есть куча ошибок с определениями вашего класса:

  • Неправильный порядок и нет предварительных объявлений
  • Отсутствует терминатор точки с запятой
  • Отсутствует объявление конструктора
  • Отсутствует тело определения конструктора
  • Недопустимый инициализатор образца / заполнителя

Но как только они исправлены, на самом деле это всего лишь случай соответствия ваших скобок.

Вот, пожалуйста!

struct D
{
 int D_MemberVar;
};

struct C
{
 int* c_ptrMemberVar;
};

struct B
{
 C c_memberVar;
 D* d_ptrMemberVar;
};

struct A
{
 B b_memberVar;
 int int_memberVar;
};

class XYZ
{
 A m_memberVar;
 int z;

public:
 XYZ();
};

XYZ::XYZ()
    : m_memberVar{
        {    // A::b_memberVar
            {   // B::c_memberVar
                nullptr    // B::c_ptrMemberVar
            },
            nullptr  // B::d_ptrMemberVar
        },
        3    // A::int_memberVar
    }
    , z(0)
{}

int main()
{
    XYZ xyz;
}

( live demo )

Я подозреваю, что ключ в том, что вы пытались использовать конструктор A,но в этом классе нет конструктора не по умолчанию.Таким образом, вам нужно {} на верхнем уровне тоже.

...