Может кто-то пожалуйста, помогите мне понять, в чем проблема?
Массивы обладают следующими свойствами:
- Все его элементы имеют одинаковый размер.
- Элементы хранятся смежно.
Это позволяет рассчитать адрес памяти каждого элемента (например, id[i]
) от размера и адреса памяти первого элемента и индекса i
.
Для этого компилятор должен знать, насколько велики элементы массива. Когда вы объявляете член Vertex::edges[20]
, компилятор пока не знает, как большие объекты типа Edge
. Следовательно, ошибка компилятора.
Один из способов избежать этого - определить структуру Edge
до структуры Vertex
. В вашем случае это не поможет, потому что Edge::target
имеет тип Vertex
, и вы получите аналогичную ошибку. Адреса адресов элементов структуры вычисляются с использованием адреса памяти объекта и добавления размеров членов (и, возможно, некоторых дополнений), которые предшествуют запрашиваемому элементу.
В таком случае с круговыми зависимостями можно использовать указатели в качестве элементов, поскольку указатель на структуру имеет одинаковый размер, независимо от того, какие элементы имеет структура, на которую указывает указатель.
-1 для размещения * снимка экрана * из текста. (Должно быть, это видео Youtube, показывающее ваш код по строкам, поддерживаемый Abba.) –
@KerrekSB Проблема решена – totymedli
Ваша установка не имеет смысла. Это по существу то же самое, что и 'struct Box {struct Box x; }; '. –