2014-02-20 9 views
0

Я работаю над процедурной базой построителя уровня игры на рекурсивном конструкторе. Каждый новый объект Door вызывает конструктор для объекта Room за его пределами, который, в свою очередь, вызывает новые конструкторы дверей для своих стен до тех пор, пока не будет достигнут предел комнат. Для правильного обхода мне нужны мои комнаты, чтобы знать, что такое «Дверь» и «Мои двери», чтобы иметь указатели на Комнаты, в которые они идут/из, но компилятор, похоже, не нравится. Сначала у меня была #includes ромашка прикованная (>> означает #include здесь):Как правильно строить классы, которые ссылаются друг на друга? (C++)

randDungeon.cpp >> door.cpp >> door.h >> room.cpp >> room.h >> Библиотека. cpp >> Library.h

но я получаю сообщение об ошибке, когда пытаюсь скомпилировать сообщение с сообщением, что, по существу, room.cpp не знает, что такое объект Door. Если я обращу комнату и дверь в поток выше, я получаю обратную ошибку - мои комнаты знают, что у них есть, но двери больше не понимают Комнату.

Какова правильная организация классов, так что не-наследственные классы Door and Room могут разговаривать друг с другом?

+1

Надеюсь, вы не '# include' ing .cpp файлы ... – LordAro

+0

Мне никогда не говорили, и компилятор не жалуется. Могу я спросить, почему? – redkat85

+0

Написано как ответ – LordAro

ответ

3

Все #include is is copy & Вставьте содержимое файла в базовый файл (randDungeon.cpp). Это делает ваш .h файлы в основном бесполезно, и, как вы обнаружили, делает использование классов сложных

Что вам нужно сделать, это:

  • Stop #include ИНГ * .cpp файлы
  • #include соответствующий (* .h) в файлах, необходимых (.cpp и .h файлы), или использовать форвардные объявления классов (предпочтительно)
  • Посмотрите, как скомпилировать несколько файлов, поскольку в настоящее время вы, скорее всего, просто компилируете randDungeon.cpp
Смежные вопросы