Есть 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.
Комментариев нет:
Отправить комментарий