2013-11-29 3 views
-1

У меня возникла небольшая проблема при создании моего собственного игрового движка на C++. Я хочу иметь два объекта:Проблемы с зависимостями объектов C++

класс ObjectCreator и класс Player. Создатель объекта может создать игрока, и игрок может использовать создателя объекта для создания пули. Проблема в том, что использование обоих файлов заголовков друг для друга приведет к тому, что игра не будет компилироваться. Просто объявление класса в файле заголовка без #include не работает, потому что я не смог бы получить доступ к таким функциям.

Вот пример:

#include "Player.h" 
class ObjectCreator 
{ 
public: 
ObjectCreator(); 
void CreatePlayer(); 
} 

#include "ObjectCreator"; 
class Player 
{ 
Public: 
Player(); 
CreateBulletsWithObjectCreator(); 
} 

Итак, кто-нибудь есть решение этой проблемы? любая помощь оценивается: 3

+1

Это не скомпилирует: 'Public:' является синтаксической ошибкой. – Bathsheba

+0

@ Bathsheba, его псевдокод, sry должен был упомянуть. – SolidSpy24

+0

@ SolidSpy24 - Действительно - даже не похож на псевдокод - не на алготизм в поле зрения –

ответ

3

Если у вас есть круговая зависимость, это обычно запах плохой конструкции. Общим способом решения этой проблемы было бы извлечение функциональности в одной части, на которую ссылается другая, в третий класс.

В вашем случае вы можете, например, отделите свой ObjectCreator на PlayerCreator и BulletCreator. Кажется, не имеет никакого логического смысла, чтобы один класс создавал все виды объектов в любом случае.

Синтаксически, были бы также способы жить с круговой зависимостью. Хитрость заключается в том, чтобы только forward-declare объект с циркулярной ссылкой, по крайней мере, в одном из файлов заголовков вместо включения его заголовка; а затем включить другой заголовок только в исходный файл. Однако из-за запаха плохого дизайна, как правило, лучше сделать редизайн, упомянутый выше.

Смежные вопросы