Probleme avec un simple héritage....

manta7 Messages postés 105 Date d'inscription samedi 25 janvier 2003 Statut Membre Dernière intervention 13 décembre 2008 - 13 déc. 2008 à 10:48
cs_goodboy21 Messages postés 29 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 11 avril 2010 - 13 déc. 2008 à 15:14
Bonjour, j'ai un petit souci avec un simple héritage :

J'ai une classe Ant :

Ant.cpp :

#include "Ant.h"
Ant::Ant() {
    mouvement->set_direction(0);
}
Ant::~Ant() {
}

Ant.h :

#ifndef ANT_H_
#define ANT_H_

#include "Mouvement.h"
#include <QGraphicsItem>
#include <QPainter>
#include <QObject>

using namespace std;

class Ant : public QObject, public QGraphicsItem {
    Q_OBJECT
public:
    Ant();
    virtual ~Ant();
    Mouvement *mouvement;
};
#endif /* Ant_H_ */

Et une classe Mouvement censé s'occuper des déplacements :

Mouvement.cpp :

#include "Mouvement.h"
Mouvement::Mouvement() {
}
Mouvement::~Mouvement() {
}

Mouvement.h :

#ifndef MOUVEMENT_H_
#define MOUVEMENT_H_

#include "Ant.h"

class Mouvement : public Ant { //La je fais l'héritage
public:
    Mouvement();
    virtual ~Mouvement();
};

#endif /* MOUVEMENT_H_ */

Et la ça ne compile pas et il me met une erreur dans Mouvement.h à la ligne :
class Mouvement : public Ant {
L'erreur est :
erreur: expected class-name before «{» token

Je pouvais pourtant pas faire un héritage plus simple... je vois pas d'ou vient l'erreur

5 réponses

manta7 Messages postés 105 Date d'inscription samedi 25 janvier 2003 Statut Membre Dernière intervention 13 décembre 2008
13 déc. 2008 à 12:33
Personne n'a d'idée... ? :(
0
cs_goodboy21 Messages postés 29 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 11 avril 2010
13 déc. 2008 à 14:05
essai d'enlever ton <#include "Mouvement.h"> dans ton ant.h
 car tu as un< #include "ant.h"> dans ton Mouvement.h,
tu fais une inclusion circulaire là
0
manta7 Messages postés 105 Date d'inscription samedi 25 janvier 2003 Statut Membre Dernière intervention 13 décembre 2008
13 déc. 2008 à 14:12
Ok ..mais si je fais ça comment de la classe Ant je peux avoir acces aux données de Mouvement ??
0
cs_goodboy21 Messages postés 29 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 11 avril 2010
13 déc. 2008 à 15:05
on fait tes classes sont imbriquées l'une dans l'autres c'est pas une bonne méthode,
ce que tu pe faire meme c'est pas tres élégant c'est déclarer
Mouvement de type DWORD dans ant.h et afin d'éviter à include  Mouvement.h
ant.h :
class Ant : public QObject, public QGraphicsItem {
    Q_OBJECT
public:
    Ant();
    virtual ~Ant();
    DWORD mouvement;
};

et dans ant.cpp
tu inclus Mouvement.h

Ant::Ant() {
  Mouvement*_tmp=new Mouvement();
  mouvement=(DWORD)_tmp;
// pour utiliser ton mouvement il faudra faire un cast ,par exemple

((Mouvement*)mouvement)->set_direction(0);
  
}
Ant::~Ant() {
Mouvement*_tmp=(Mouvement*)mouvement;
delete _tmp;
}

petit conseil des classes qui s'imbriquent l'une dans l'autre n'est pas une architecture.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_goodboy21 Messages postés 29 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 11 avril 2010
13 déc. 2008 à 15:14
je vien de regarder ton code de plus près et ton héritage n'est pas bon du tout, si Mouvement hérite de Ant tu n'as pas à déclarer Mouvement dans Ant .Puisque Mouvement est aussi un Ant "héritage".
explique ce que tu ve faire pour puisse t'aider
0
Rejoignez-nous