Хотя вы не показываете это, я предполагаю, что B.h
включает C.h
;в противном случае строка C c;
не будет компилироваться.Это вызывает циклическую зависимость в заголовочных файлах: B.h
должно быть включено до C.h
, что должно быть включено до B.h
, что невозможно.
Самое простое решение - переместить тело C::Start
из определения C
, так что C.h
не нужно включать B.h
.Определение функции может идти в исходный файл или в отдельный заголовок, если вы хотите сохранить его встроенным.
В качестве альтернативы, вы можете изменить B
, чтобы он содержал std::unique_ptr<C>
вместо экземпляра C
и реализовать конструктор (в исходном файле или в отдельном заголовке), который инициализирует его с new C
.Тогда B.h
нужно только направить объявление class C;
вместо включения C.h
.
Лучшим решением, если это возможно, было бы переосмысление отношений между классами, чтобы не было круговой зависимости.
(ОБНОВЛЕНИЕ: когда я писал этот ответ, вопрос изменился, чтобы показать, что B.h
действительно включает C.h
, как я и догадывался.)