Страница 1 из 1 |
Автор | Сообщение |
---|---|
|
0
Есть класс Level, в нём есть вектор экземпляров класса Mob. В классе Mob используется ссылка на экземпляр класса Player. В классе Player используется ссылка на Level и т.д. Подскажите как правильно организовать эти гадские инклуды, или как можно неограничено использовать например методы класса Level в других классах (у меня в классе Level высчитывается столкновение, проверять столкновение нужно как мобам\снарядам\ так и игроку).
Меня эта магия уже утомила. |
20 ноя 2013, 01:30 |
|
|
0
я б тоже послушал толковое обьяснение |
20 ноя 2013, 01:39 |
|
|
0
напиши с примером кода |
20 ноя 2013, 06:47 |
|
|
0
// Level.h class Level { #include "Mob.h"? public: Level(); private: std::vector<Tile*>tiles; };
// Projectile.h #include "Level.h"? class Projectile { public: bool isAlive(); private:
// Player.h #include "Level.h"? class Player : public Mob { private:
// Mob.h #include "Player.h"? class Mob { // Generic // Used By Mob virtual void OrderMove(float x, float y) = 0; virtual void OrderAttack(Player &player); // Used By Player |
20 ноя 2013, 09:54 |
|
|
0
если мне не изменяет память, давно на сях не писал, то тут может помочь
#ifndef __MY_CONST__ #define __MY_CONST__ 1
#include ....
Описание класса
#endif
Даже если инклюдить циклически, каждый хидер будет заинклюжен ровно 1 раз. Вроде как-то так.
|
20 ноя 2013, 11:09 |
|
|
0
Насколько помню, в хедеры, с использованием ifndef инклюдишь все остальные необходимые хедеры, либо делать заглушки |
20 ноя 2013, 11:10 |
|
|
0
Ну что можно сказать, учите мат. часть, а именно правило объявления и подключения вложений.
|
20 ноя 2013, 11:22 |
|
|
0
Инклуд гварды есть во всех хедерах классов, просто в примере не вписал их. Когда все включается по кругу, они не помогают. Объявить декларацию класса используемого в Level перед его использованием и убрать оттуда #include "Mob.h"
Форвард декларация почему-то не рабоатет. Пробовал писать что-то типа class Mob; Но компилятор выдавал ошибку что-то типа "ссылка на неполный класс" или на int точно не помню. Или может нужно было написать полный интерфейс используемого класса ? |
20 ноя 2013, 12:37 |
|
|
0
хотел написать гневный ответ автору топика но ... я сдержался. з.ы. приложил бы хоть блок схему взаимодейсвия классов, а то по описанию похоже что ООП сломало поциенту мозг. в общем готов пообщатся в скайпе после 20:00 по москве Скайп syslol88
|
20 ноя 2013, 16:17 |
|
|
3
Microsoft Visual Studio 2012 - всё работает.
Mob.h Код: #pragma once #include "Level.h" class Mob { public: Mob(void); ~Mob(void); void test(Level* lvl); };
Level.h Код: #pragma once class Mob; class Level { public: Level(void); ~Level(void); void test(Mob* mob); }; |
20 ноя 2013, 16:48 |
|
|
0
Всем спасибо за помощь. Разобрался.
ЗЫ. Просто после явы на с++ перешел. Там с этим делом немного проще. |
20 ноя 2013, 18:11 |
|
Страница 1 из 1 |