Probleme d'heritage

bakibak Messages postés 4 Date d'inscription samedi 19 février 2005 Statut Membre Dernière intervention 5 janvier 2009 - 3 janv. 2009 à 17:42
bakibak Messages postés 4 Date d'inscription samedi 19 février 2005 Statut Membre Dernière intervention 5 janvier 2009 - 5 janv. 2009 à 07:28
Bonjour a tous, je suis en train de coder un projet pour la gestion d'un zoo a la fac.

Sans tout vous décrire j'ai une classe personne et deux classe héritées qui sont les agents d'entretien et les soigneur.

A la compilation, le fichier agent ne pose pas de probleme, mais j'ai une erreur sur le fichier soigneur :

.../Soigneur.h|26|erreur: invalid use of incomplete type ‘struct Personne’|

J'ai codé de la même facon mes deux fichiers et je ne comprend rien.

Voici les morceaux de code importants :

Personne.h

#ifndef PERSONNE_H
#define PERSONNE_H

#include "Zoo.h"

class Zoo ;
class Soigneur ;

class Personne
{

  Zoo* m_Zoo   ;
  std::string m_Nom;
  std::string m_Prenom;
  std::string m_Adresse;
  int m_Id;
  float m_Tarif;

public :

  //Constructeur par defaut et sa surcharge.
  Personne () ;
  Personne (Zoo* Zoo ,  std::string Nom,  std::string Prenom,  std::string Adresse,  int Id,  float Tarif ) ;


AgentEntretien.h

#ifndef AgentEntretien_H
#define AgentEntretien_H
#include "Personne.h"

/**
  * class AgentEntretien
  */

class Enclos ;

class AgentEntretien : public Personne
{

  int m_TempsEntretient;
  Enclos* m_Enclos ;

public:

  //Constructeur par defaut et sa surcharge.
  AgentEntretien() ;
  AgentEntretien ( int TempsEntretient,Enclos* Enclos ) ;


Et enfin celui qui merde, Soigneur.h :

#ifndef SOIGNEUR_H
#define SOIGNEUR_H

#include "Personne.h"

/**
  * class Soigneur
  */

class Animal ;
class Personne ;

class Soigneur : public Personne
{

  int m_TempsSoin;
  std::list m_ListeAnimaux ;

public :

  //Constructeur par defaut et sa surcharge.
  Soigneur() ;
  Soigneur(int TempsSoin, std::list Liste_Animaux ) ;


Je n'ai bien sur pas collé la suite des fichiers. Si manque quelque chose je le rajouterai.

Si vous pouviez me sauver la vie car là je sature un maximum sur cette erreur depuis quelques heures.

Merci d'avance smile

6 réponses

niclouxs Messages postés 6 Date d'inscription samedi 3 janvier 2009 Statut Membre Dernière intervention 4 janvier 2009
3 janv. 2009 à 19:37
Salut,

Dans ton fichier Soigneur.h, tu fais un forward declaration de Personne ("class Personne;") qui n'est pas necessaire puisque tu inclus deja Personne.h. J'imagine que le compilateur essaye de compiler la classe soigneur, il prends cette 2eme declaration (incomplete) comme reference ce qui causerait l'erreur que tu as.

A ta place, j'essayerais d'enlever cette ligne ("class Personne;").

Seb
0
bakibak Messages postés 4 Date d'inscription samedi 19 février 2005 Statut Membre Dernière intervention 5 janvier 2009
3 janv. 2009 à 19:50
Déjà essayé, j'ai mis cette ligne car si je ne la met pas j'ai droit à un :

/home/.../Soigneur.h|26|erreur: expected class-name before ‘{’ token|

Un autre systeme pour remplacer ça si mon erreur vient de la ?
0
niclouxs Messages postés 6 Date d'inscription samedi 3 janvier 2009 Statut Membre Dernière intervention 4 janvier 2009
3 janv. 2009 à 20:53
Ok, donc ca signifie que ta classe Personne n'est pas bien reconnue.
Je reverifierais le fichier Personne.h: Est-ce qu'il y a bien un ";" apres l'accolade de fermeture "}" qui termine la definition de la classe ?

Si c'est pas ca, pourrais tu mettre le fichier Personne.h au complet ? Ca pourrait peut etre nous aider.

Seb
0
bakibak Messages postés 4 Date d'inscription samedi 19 février 2005 Statut Membre Dernière intervention 5 janvier 2009
4 janv. 2009 à 12:50
Voila le code de Personne.h :

#ifndef PERSONNE_H

#define PERSONNE_H

#include "Zoo.h"

class Zoo ;

class Personne

{

  Zoo* m_Zoo   ;

  std::string m_Nom;

  std::string m_Prenom;

  std::string m_Adresse;

  int m_Id;

  float m_Tarif;

public :

  //Constructeur par defaut et sa surcharge.

  Personne () ;

  Personne (Zoo* Zoo ,  std::string Nom,  std::string Prenom,  std::string Adresse,  int Id,  float Tarif ) ;

  /**

   * @return Personne

   */

  Personne* get_Personne ( );

  /**

   * Set the value of m_Nom

   * @param new_var the new value of m_Nom

   */

  void setNom ( std::string new_var );

  /**

   * Get the value of m_Nom

   * @return the value of m_Nom

   */

  std::string getNom ( );

  /**

   * Set the value of m_Prenom

   * @param new_var the new value of m_Prenom

   */

  void setPrenom ( std::string new_var );

  /**

   * Get the value of m_Prenom

   * @return the value of m_Prenom

   */

  std::string getPrenom ( );

  /**

   * Set the value of m_Adresse

   * @param new_var the new value of m_Adresse

   */

  void setAdresse ( std::string new_var );

  /**

   * Get the value of m_Adresse

   * @return the value of m_Adresse

   */

  std::string getAdresse ( );

  /**

   * Set the value of m_Id

   * @param new_var the new value of m_Id

   */

  void setId ( int new_var );

  /**

   * Get the value of m_Id

   * @return the value of m_Id

   */

  int getId ( );

  /**

   * Set the value of m_Tarif

   * @param new_var the new value of m_Tarif

   */

  void setTarif ( float new_var );

  /**

   * Get the value of m_Tarif

   * @return the value of m_Tarif

   */

  float getTarif ( );

  ~Personne() ;

};

#endif // PERSONNE_H
0

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

Posez votre question
nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 3
4 janv. 2009 à 23:22
Salut,
1- crees un fichier d'entete header.hpp . Dans ce fichier tu definis tout ce dont tu as besoin

header.hpp
[code]
#include
#include <cstdlib>
#include <list>
#include <string>
using namespace std;


class Zoo;
class Personne;
class Enclos;
class AgentEntretien;
class Animal;
class Soigneur;

Ensuite dans chaque fichier d'entete de definition de classe tu inclues ce fichier header.hpp (ou .h ca depend de comment tu l'appelles).

Bonne continuation.

je suis heureux de faire partie d'une grande famille ...!

/B&
0
bakibak Messages postés 4 Date d'inscription samedi 19 février 2005 Statut Membre Dernière intervention 5 janvier 2009
5 janv. 2009 à 07:28
J'essaye ca des que je rentre de partiel cet aprem.

Merci beaucoup :)
0
Rejoignez-nous