Примечание: это работает только для указателей (и в c ++, ссылки). Если у вас есть ссылка на законченный объект, компилятор должен будет знать об этом.

я есть простой код C с файлами * .c и * .h в рабочей области.
У меня есть файл заголовка 1.h, объявляя некоторую структуру как

struct my1
{ 
int a;
..
..
}my_t;

Но когда я пытаюсь объявить переменную типа struct my1 в другом заголовочном файле 2.h следующим образом:

struct my1 variable1;

Это дает ошибку в этой точке декларации.

Похоже, что my1 здесь не определено в файле 2.h.

В файле 1.h мне нужно включить 2.h, поэтому в файле 2.h я не могу включить 1.h из-за боязни рекурсивного включения.

Мой вопрос:

Что мне нужно объявить, чтобы устранить ошибку компиляции в этом случае?

Все это заставило меня задуматься над дальнейшими вопросами о включениях заголовочных файлов.

Как включены заголовочные файлы, в каком порядке, какой заголовочный файл первым, а какой?

Вызывает ли рекурсивное включение заголовочных файлов ошибки одного файла, в том числе другого, и других, в том числе первого?

Не удалось опубликовать фактические фрагменты кода по какой-либо причине безопасности, поэтому извините, если вопрос вызывает проблемы с читабельностью.

Ответы на вопрос(7)

Ваш ответ на вопрос