2016-05-17 2 views
0

К сожалению, я получил структуру include, которая приводит к проблеме, когда класс Z должен включать класс A из-за наследия, но Z сначала включается. littlebit более ясно:странно включают зависимость

A.h includes B.h 
B.h includes C.h 
C.h includes D.h 
D.h includes Z.h 

Так Z получает определен до А. Это приводит к ошибке, говоря «BaseClass не определено». Я не могу использовать форвардное объявление, потому что в каждом классе я вызываю функции классов, которые я включаю.

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

+0

Похоже, вы хотите: http://stackoverflow.com/questions/7714345/forward-declaration-with-vector-of-class-type-pointer-to-incomplete-class-type – NathanOliver

ответ

1

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

Нет, не быстрое исправление. Вам необходимо перестроить свой код, по крайней мере w.r.t. к включенным.

Вы можете изучить шаблоны, чтобы помочь, но они могут быть сложнее, чем нужно.

тех пор, пока «не-а» отношения применимо, вы можете удалить A как базовый класс и переместить его, чтобы быть членом (через. std::shared_ptr<A> или std::unique_ptr<A>) и переадресовывать объявить A. Если отношение «is-a» применимо, тогда у вас есть круговые зависимости, которые вам нужно каким-то образом сломать (опять-таки, умные указатели могут помочь).

Вы не упомянули использование или требования к файлу cpp; используйте файлы cpp (Z.cpp), чтобы изолировать код, вызывающий вызов членов A, таким образом, требования заголовка снижаются.