Я прочитал в this вопрос, чтоКруговые Зависимости между классами C++
Если у вас действительно есть модель, где А содержит B и B содержит А, то эти классы кажутся неспособными жить друг без друга. В этом случае, возможно, у вас действительно есть только один класс, а не два.
Что бы так быть, если А может содержать B, но B всегда должны иметь ссылку на А (В не может существовать без)?
Чтобы проиллюстрировать, существует класс Куба, который может содержать объект класса Collider (IE: другие кубы с коллайдерами должны сталкиваться с ним).
class Cube
{
public:
Cube();
~Cube();
Collider collider; //Optional Collider
}
class Collider
{
public:
Collider(Cube & parentReference) : parent(parentReference) {}
private:
Cube & parent;
}
В случае, например, как это, где куб и коллайдер должен действительно быть два отдельных классов, как можно избежать циклических зависимостей в то же время иметь возможность хранить ссылку на куб в коллайдере?
Редактировать: на этот вопрос с этого момента никто не ответил. Тем не менее, кто-то достаточно любезен, чтобы сообщить мне, почему этот вопрос был занижен, так что я бы изменил то, как я прошу в будущем? Дублирование? Не хватает информации? Слишком много вопросов начинающих? Дайте мне знать :)
В вашем 'class Cube' я либо использовал бы' Collider * collider', и проверил бы его на null, либо использовал 'boost :: optional optionalCollider'. –
AlexanderS
В любом случае, не должны ли оба коллайдера и класса куба включать заголовки друг друга? Разве это не приведет к циклическим зависимостям? – Sam
Да, но так как стико написал в ответе ниже, вы можете добавить декларацию вперед, чтобы исправить вопрос о движении кругового движения. – AlexanderS