Страницы

Поиск по вопросам

суббота, 8 февраля 2020 г.

Два заголовочных файла содержащих друг друга

#cpp


Есть 2 класса, которые находятся в разных заголовочных файлах. Мне нужно объявить
в первом классе ссылку на второй класс, а во втором ссылку на первый.
Если делать такую цикличность, то в каком-то из классов выдается ошибка "type name
expected". 

Как это можно исправить?
    


Ответы

Ответ 1



Проблема понятна. Что происходит: c1.cpp: включает c1.h c1.h: устанавливает include guard: #ifndef C1_H #define C1_H c1.h: подключает c2.h c2.h: устанавливает свой include guard и подключает c1.h читается c1.h, но из-за include guard #ifndef C1_H не срабатывает, весь контент игнорируется код в c2.h не видит классов, определённых в c1.h Если вам нужно сделать лишь ссылку на класс, вам не обязательно подключать header. Попробуйте так: // c1.h // предварительное объявление, его должно быть достаточно class c2; class c1 { c2* p; // остальной код класса }; А вот в c1.cpp уже нужно будет реально подключать c2.h. При этом любой код из класса, который разыменовывает указатель на c2, должен уйти в c1.cpp.

Комментариев нет:

Отправить комментарий