invalid use of incomplete type 'class ...'
Ostatnio zmodyfikowano 2015-02-14 19:10
colorgreen19 Temat założony przez niniejszego użytkownika |
invalid use of incomplete type 'class ...' » 2015-02-14 12:52:09 Męcze sie juz 2 h, stosuje #include tam gdzie jest potrzeby pełen obraz klasy z forward declaration gdzie tylko "wspomnienie" ale nic sie nie posunąłem naprzód. ten błąd albo expected class name before token... Tak to wygląda: (pominę wszystkie#ifndef itp przy plikah nagłówkowych bo wszedzie wiadomo jakie sa) Błąd w linijce BossTymon w wynkcji AI przy odwołaniu scene.player->getPosition() BossTymon.h //class Boss : public Mob #include "TymonBullet.h" #include "Boss.h"
class BossTymon : public Boss { public: BossTymon(); ~BossTymon(); void Ai( Scene & scene ); BossTymon * clone() { return new BossTymon( * this ); }; void shoot( Scene & scene ); protected: private: };
Mob.h #include "Creature.h" #include "Formation.h"
class Formation;
class Mob : public Creature { public: Mob(); ~Mob(); virtual void Ai( Scene & scene ); Formation * formation; };
Scene.h #include "Manager.h"
class Mob; class Bullet; class GameText; class Player;
class Scene { public: Scene(); ~Scene(); Manager < Mob > * mobManager; Manager < Bullet > * bulletManager; Manager < GameText > * gametextManager; Player * player; protected: private: };
Player.h #include "Creature.h" #include "Scene.h"
class Player : public Creature { public: Player(); ~Player(); void getInput(); void update( sf::Time elapsed ); void setScene( Scene * scene ); bool toshoot = false; int money; void shoot( Scene & scene ); protected: Scene * m_scene; private: };
Creature.h #include "Scene.h"
class Bullet; class Scene;
class Creature { public: Creature(); ~Creature(); virtual void shoot( Scene & scene ); int getMovementSpeed() { return m_movementspeed; }; protected: Bullet * m_bullet; };
Formation.h #include "Mob.h" #include "Manager.h"
class Pattern;
class Formation { public: Formation(); ~Formation(); std::vector < Mob * > & getMob() { return m_mobs; }; sf::Vector2f *** pattern; void combineWithPattern( Pattern * pattern ); void addMobsToManager( Manager < Mob > & manager ); void erase( Mob * mob ); protected: private: std::vector < Mob * > m_mobs; };
Bardzo prosze o pomoc gdzie dac jakie #includy i forward declarationy |
|
maly |
» 2015-02-14 13:37:36 Jeśli to 'class ...' to scene to przekaż wskaźnikiem a nie referencją. |
|
colorgreen19 Temat założony przez niniejszego użytkownika |
» 2015-02-14 16:01:54 nie, tam jest 'class Player', mimo to zamieniłem wszystkie referencje do scene na wskażniki jednak problem nadal występuje w tym samym miejscu; dzieje się taka rzecz że kiedy w Scene.h jest #include "Player.h" to jest błąd "Player does not name a type (nr 21 ) a jesli jest forwadr declaration class Player; natomiast nie ma tego #inculda to błąd jest taki jak cały czas Scene.h #include "Bullet.h" #include "GameText.h" #include "Player.h"
class Mob; class Player;
class Scene { public: Scene(); ~Scene(); Manager < Mob > * mobManager; Manager < Bullet > * bulletManager; Manager < GameText > * gametextManager; Player * player; protected: private: }; |
|
Monika90 |
» 2015-02-14 16:52:01 Nie możesz mieć w pliku player.h dyrektywy #include "scene.h" i jednocześnie w scene.h #include "player.h" to jest bez sensu. |
|
colorgreen19 Temat założony przez niniejszego użytkownika |
» 2015-02-14 17:31:48 To jak to rozwiązać? zrobiłem teraz tak jednak nadal błąd to invalid user of incomplete type 'class Player' Scene.h #include "Manager.h" #include "GameText.h"
class Mob; class Player; class Bullet;
class Scene { public: Scene(); ~Scene(); Manager < Mob > * mobManager; Manager < Bullet > * bulletManager; Manager < GameText > * gametextManager; Player * player; protected: private: };
Player.h #include "Creature.h" #include "Scene.h"
class Player : public Creature { public: void setScene( Scene * scene ); void shoot( Scene * scene ); protected: Scene * m_scene; private: };
Mob.h #include "Creature.h" #include "Scene.h"
class Formation;
class Mob : public Creature { public: virtual void Ai( Scene * scene ); Formation * formation; };
Creature.h BossTymon.h #include "TymonBullet.h" #include "Boss.h" #include "Scene.h"
class BossTymon : public Boss { public: void Ai( Scene * scene ); void shoot( Scene * scene ); };
Formation.h #include "Manager.h"
class Pattern; class Mob;
class Formation { public: std::vector < Mob * > & getMob() { return m_mobs; }; sf::Vector2f *** pattern; void combineWithPattern( Pattern * pattern ); void addMobsToManager( Manager < Mob > & manager ); void erase( Mob * mob ); private: std::vector < Mob * > m_mobs; };
Bullet.h class Creature;
class Bullet { public: Creature * owner; };
Pliki ktore dziedzicza po Creature tzn Player, Mob, BossTymon dostały #include "Scene.h", Scene.h ma forward deklaracje do nich. i nadal to nie działa. co robie źle? |
|
Monika90 |
» 2015-02-14 17:45:50 W którym pliku jest ten błąd? Pokaż zawrtosć tego pliku i zaznacz linię w której jest błąd. |
|
colorgreen19 Temat założony przez niniejszego użytkownika |
» 2015-02-14 18:20:41 blad nr 1 - invalid user of incomplete type 'class Player' blad nr 2 (ktory jest tak jakby (chyba) wytłumaczeniem powodu błędu nr 1 - forward declaration of 'class Player' BossTymon.cpp #include "BossTymon.h" #include "TextureManager.h"
BossTymon::BossTymon() { m_displaySprite.setTexture( * TextureManager::GetT( "Tymon" ) ); m_direction = Direction::Down; m_bullet = new TymonBullet( m_direction ); m_hp = m_hpMax = 550; m_movementspeed = 50; m_shootTime = m_shootTimeF = sf::seconds( 0.004 ); m_displaySprite.scale( 0.6, 0.6 ); m_money = 150; }
BossTymon::~BossTymon() { }
void BossTymon::Ai( Scene * scene ) { if( m_behaviour == MoveAbovePlayer ) { if( scene->player->getPosition().x + 200 < m_x ) { velocity.x = - m_movementspeed; } else if( scene->player->getPosition().x - 170 > m_x ) { velocity.x = m_movementspeed; } else { m_behaviour = Attack; } } else if( m_behaviour == MoveInFormation ) { cout << "efgseg" << endl; if( scene->player->getPosition().x + 40 < m_x ) { } else if( scene->player->getPosition().x - 40 > m_x ) { } else { velocity.x = 0; velocity.y = 0; m_behaviour = Attack; } } }
void BossTymon::shoot( Scene * scene ) { if( m_shootTime <= sf::Time::Zero ) { Bullet * b = m_bullet->clone(); b->owner = this; scene->bulletManager->add( b ); m_shootTime = m_shootTimeF; } }
Scene.h #ifndef SCENE_H #define SCENE_H #include "Manager.h" #include "GameText.h" class Mob;
class Player; class Bullet;
class Scene { public: Scene(); ~Scene(); Manager < Mob > * mobManager; Manager < Bullet > * bulletManager; Manager < GameText > * gametextManager; Player * player; protected: private: };
#endif
|
|
Monika90 |
» 2015-02-14 18:28:23 Dodaj #include "Player.h" w pliku BossTymon.cpp, jeżeli to nie pomoże, to chyba będziesz musiał opublikować cały projekt... |
|
« 1 » 2 |