Страницы

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

пятница, 12 апреля 2019 г.

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

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


Ответ

Проблема понятна.
Что происходит:
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.

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

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