Я создаю систему сущностей на основе компонентов для игрового движка.C++: проблема с концептуальной циркуляцией
У меня есть класс сущностей, который должен включать в себя заголовок компонента базового класса для того, чтобы определить массив компонентов private Component* components[ 123 ]
Однако в компоненте базового класса я должен определить private Entity* ownerEntity
, beacuse важно что компонент знает, кому он принадлежит!
Это приводит к необходимости Entity.h Component.h и наоборот -> циклическая ссылка
Как я могу решить эту проблему?
* Действительно? * Удивительный! – Ricc
На самом деле, потому что в обоих классах вам нужны только указатели, вы можете (должны!) Переслать-заявить иждивенцев, а не включать их в оба заголовка. Ни один из заголовков в этом случае не должен зависеть от другого; это обеспечит сверхбыструю компиляцию. Прополощите и повторите для всех других ссылок, указателей и их аналогов const для каждого класса. ** Также **: прочитайте [что говорит Херб Саттер о зависимостях времени компиляции] (http://www.gotw.ca/gotw/007.htm). – wilhelmtell
Вы можете задуматься слишком далеко - я однажды «умно» объявил auto_ptr, поэтому я мог бы иметь очень низкоуровневый класс, включающий редко используемый метод toString(), возвращающий auto_ptr . Это означает, что вам нужно '#include ' везде, где вы * делаете *, называете это, а ошибки, которые вы получаете от gcc, если вы этого не делаете, вряд ли интуитивно понятны. –