Возникает ошибка C2039 там где не должна

есть 2 структуры данных, одна нужна для упрощения второй

struct vershina
{
    vershina* LinkStraight; // указатель на следующий элемент массива (пока не использ.)
    connect svyazi[50]; // массив указателей - связей 
    int id;
    string name;
    unsigned int valid_connects = 0;//сколько инициализированно связей
};
//структура связи, хранит указатель на связанный элемент и вывод при переходе
struct connect
{
    string out; //что выходит
    vershina* connect; // с чем соединено
};

При попытке обратиться к ним в main вот так возникает ошибка С2039

int valid_connects;
    int findIndex;
vershina *toPTR;
vershina list[100];
string transout;
.
.
.
list[findIndex].svyazi[valid_connects].connect = toPTR;
        list[findIndex].svyazi[valid_connects].out = transout;

svyazi: не является членом "vershina"

Не понимаю где ошибся, т.к. вроде обращаюсь сначала к элементу массива, затем к полю данных этого элемента, которое тоже массив, к номеру в нем и к полю данных элемента 2 массива. Структура запутанная, но не противоречивая.


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

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

На момент определения struct vershina, идентификатор connect ещё не определён. Чтобы решить Вашу проблему необходимо перенести определение struct connect перед struct vershina. Но и этого будет недостаточно, потому что в struct connect используется тип vershina. Поэтому перед struct connect необходимо сделать предварительное объявление типа vershina. Делается это так:

struct vershina;

Всё вместе будет выглядеть так:

struct vershina;

struct connect
{
    string out;
    vershina* connect;
};

struct vershina
{
    vershina* LinkStraight;
    connect svyazi[50];
    int id;
    string name;
    unsigned int valid_connects = 0;
};
→ Ссылка