C++ это объявление не содержит класс хранения или спецификатор типа

struct st1 {
    string name[2];
    bool active[2];
};
struct st2;
void init() {
    struct st2 {
        st1 tier1;
        st1 tier2;
        tier1";
    }
};

Я создал структуру st1 и попытался дважды использовать её в структуре st2. Насколько мне известно, именно так и нужно их добавлять, но Visual studio 2019 показывает ошибку это объявление не содержит класс хранения или спецификатор типа на строчку tier1; (если написать, к примеру, tier1.name[0]="Имя"; или заменить все массивы на несколько переменных, то ничего абсолютно не поменяется). Так же я пытался инициализировать структуру st2 вне функции, но результат оставался всё таким же.


Ответы (1 шт):

Автор решения: Dafter

У вас в структуре st2 присутствует поле st2 скорее всего из-за этого возникают ошибки. Если я правильно вас понял, то функция init() была добавлена от безысходности, потому я ее убрал. В итоге, при написании структуры так:

#include <string>

struct st1 {
    std::string name[2];
    bool active[2];
};
struct st2 {
    st1 tier1;
    st1 tier2;
};

int main()
{
    st2 c;
    c.tier1.name[0] = "5";
}

ошибок не возникает и спокойно создается экземпляр структуры, который мы можем редактировать, я для примера поменял name[0] у tier1, вот что получилось после выполнения кода:

введите сюда описание изображения

→ Ссылка