Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

invalid use of incomplete type 'class ...'

Ostatnio zmodyfikowano 2015-02-14 19:10
Autor Wiadomość
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
C/C++
#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
C/C++
#include "Creature.h"
#include "Formation.h"

class Formation;

class Mob
    : public Creature
{
public:
    Mob();
    ~Mob();
   
    virtual void Ai( Scene & scene );
   
    Formation * formation;
   
};

Scene.h
C/C++
#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
C/C++
#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
C/C++
#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
C/C++
#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
P-126553
maly
» 2015-02-14 13:37:36
Jeśli to 'class ...' to scene to przekaż wskaźnikiem a nie referencją.
P-126564
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
C/C++
#include "Bullet.h"
#include "GameText.h"
#include "Player.h"   //jesli to jest to błąd jest nizej

class Mob;
class Player; //natomiast jesli jest ta forward deklaracja to mamy cały czas ten błąd ze invalid use of incomplete type


class Scene
{
public:
    Scene();
    ~Scene();
   
    Manager < Mob > * mobManager;
    Manager < Bullet > * bulletManager;
    Manager < GameText > * gametextManager;
    Player * player; //jesli jest #include to blad tutaj (nr 21)
protected:
private:
};
P-126589
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.
P-126591
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
C/C++
#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
C/C++
#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
C/C++
#include "Creature.h"
#include "Scene.h"

class Formation;

class Mob
    : public Creature
{
public:
    virtual void Ai( Scene * scene );
   
    Formation * formation;
};

Creature.h

BossTymon.h
C/C++
#include "TymonBullet.h"
#include "Boss.h"
#include "Scene.h"

class BossTymon
    : public Boss
{
public:
    void Ai( Scene * scene );
    void shoot( Scene * scene );
   
};

Formation.h
C/C++
#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
C/C++
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?
P-126604
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.
P-126607
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
C/C++
#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()
{
    //dtor
}

void BossTymon::Ai( Scene * scene )
{
    if( m_behaviour == MoveAbovePlayer )
    {
        if( scene->player->getPosition().x + 200 < m_x ) // blad nr 1
        {
            velocity.x = - m_movementspeed;
        }
        else if( scene->player->getPosition().x - 170 > m_x ) // <-- blad nr 1 dlalej do tego
        {
            velocity.x = m_movementspeed;
        }
        else
        {
            //velocity.x = 0;
            //velocity.y = 0;
            m_behaviour = Attack;
        }
    }
    else if( m_behaviour == MoveInFormation )
    {
        cout << "efgseg" << endl;
        if( scene->player->getPosition().x + 40 < m_x ) //dalej tu itd
        {
           
        }
        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
C/C++
#ifndef SCENE_H
#define SCENE_H
#include "Manager.h"
#include "GameText.h"
class Mob;

class Player; // <-- blad nr 2
class Bullet;

class Scene
{
public:
    Scene();
    ~Scene();
   
    Manager < Mob > * mobManager;
    Manager < Bullet > * bulletManager;
    Manager < GameText > * gametextManager;
    Player * player;
protected:
private:
};

#endif // SCENE_H
P-126614
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...
P-126617
« 1 » 2
  Strona 1 z 2 Następna strona