Member 13015247 Ответов: 3

Как инициализировать вложенную структурную переменную ?


struct date{
    int month;
    int day;
    int year;
};
struct employee{
    struct nmadtype nameaddr;
    int salary;
    struct date datehired;
};
struct employee e[3];
for(i=0;i<3;i++)
struct employee e[i].datehired={2,2,16};


Что я уже пробовал:

я хочу инициализировать дату сотрудников, на которую они наняты через переменную datehired, но я не хочу инициализировать каждый член struct date индивидуально (например, e[i].datehired.month=2), поэтому я попробовал последний шаг, но он дает ошибку компиляции, поэтому plz предлагает метод, который будет работать даже в том случае, если мои 3 сотрудника имеют разную дату найма.

3 Ответов

Рейтинг:
2

Jochen Arndt

Это (расширенные списки инициализаторов) не поддерживается простым C (он поддерживается C++11).

Таким образом, вы должны установить каждый член, использовать дополнительную структуру, как предложено в решении 1, или использовать вспомогательную функцию:

void setEmployeeDate(struct employee *e, int day, int month, int year)
{
    e->datehired.day = day;
    e->datehired.month = month;
    e->datehired.year = year;
}

/* ... */
for(i=0; i<3; i++)
    setEmployeeDate(&e[i], 2, 2, 16);


Рейтинг:
0

CPallini

Попробуйте этот способ:

const struct date DH = {2,2,16};
struct employee e[3];
int i;

for(i=0; i<3; i++)
  e[i].datehired = DH;


Рейтинг:
0

Richard MacCutchan

Во второй строке неправильно:

for(i=0;i<3;i++)
struct employee e[i].datehired={2,2,16};

вы не должны уточнять struct employee в ссылке на ваши элементы. Вы также всегда должны использовать фигурные скобки для разграничения петель, как показано ниже:
for(i=0;i<3;i++)
{
    e[i].datehired={2,2,16};
}


CPallini

Эй, Ричард,насколько мне известно, это ошибка.

Richard MacCutchan

Отлично работает в MSVC (Visual Studio).

CPallini

Возможно, он работает с исходным файлом C++. Я попробовал его (Visual Studio 2012) в исходном коде A *.c и получил синтаксическую ошибку.

Richard MacCutchan

Вы, конечно, правы. Я использовал VS 2013 и C++. Но мои комментарии все еще верны.

CPallini

Да, это действительный код C++. Классический пример C++ как лучше c'.