Orienté Objet - - Utilisation Méthode externe

Résolu/Fermé
Sarvock Messages postés 20 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 3 mai 2010 - 10 janv. 2010 à 18:37
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 10 janv. 2010 à 19:44
Bonjour,

petit oublie => j'utilise CODE::BLOCKS
Je dois créer un Zoo en c++ Orienté Objet, et j'ai un problème pour accéder aux méthodes d'une classe externe...
Dans un premier temps j'ai un Animal avec une sous-classe Race, chaque animal a un numéro, nom, age (type énumérateur(jeune,adulte) et un pointeur vers un Enclos où il habite, et dans Race je gère juste le nom de la race.
Mon problème se présente (dans animal.cpp) lorsque je souhaite récupérer le nom de l'enclos, j'ai une méthode getNom() mais je n'arrive pas à y accéder. Et bien sûre si je fais "habitation->nom" il me dit que 'nom' est privé!

Je sais pas si je suis clair mais comme j'ai un pointeur vers Enclos, je pensais pouvoir accéder au nom de l'enclos dans lequel se situe l'animal...

voici les fichiers (je met pas tous les "include" du genre <iostream>, <string>...) :

-animal.h
#ifndef DEF_ANIMAL_H
#define DEF_ANIMAL_H

#include "outils.h"

#include "enclos.h"

class Animal {
  private:
  // Associations
   Enclos * habitation;
  
  // Attributes
    int num;
    std::string nom;
    old age;
  // Operations
  public:
    Animal(int, std::string, old);
    ~Animal();
    void afficheA () const;
    void setAge ( old a );
    void setNum ( int n );
    old getAge () const;
    std::string getNom () const;
    int getNum () const;
};

#endif


-animal.cpp
#include "animal.h"
#include "responsable.h"
#include "enclos.h"

using namespace std;

Animal::Animal( int nu, string no, old a){
			habitation = new Enclos;
			habitation = NULL;
			num = nu;
			nom = no;
			age = a;
}

Animal::~Animal() {
    delete habitation;
}

void Animal::afficheA () const{

    cout<<"Animal numéro :"<<num<<endl<<"nom : "<<nom<<endl;

    if (age == adulte)
        cout<<"age : Adulte"<<endl;
    else
        cout<<"age : Enfant"<<endl;
    cout<<"enclos : "<<habitation->getNom()<<endl; //*
}

... (set & get)...



*ça me donne l'erreur suivante :
obj\Debug\animal.o(.text+0x174)||In function `ZN6AnimalC2EiSs3old':|
l\Desktop\Zoo\animal.cpp|15|undefined reference to `Enclos::Enclos()'|
obj\Debug\animal.o(.text+0x2a0)||In function `ZN6AnimalC1EiSs3old':|
l\Desktop\Zoo\animal.cpp|15|undefined reference to `Enclos::Enclos()'|
||=== Build finished: 2 errors, 0 warnings ===|


-race.h

#ifndef DEF_RACE_H
#define DEF_RACE_H

#include "outils.h"

#include "animal.h"
#include "soigneur.h"
#include "enclos.h"

class Race : public Animal {
  private:
  // Associations
   Soigneur * habilitation;
   // Attributes
    std::string nom_r;
  // Operations
  public:
  	Race();
  	Race(int, std::string, old, std::string);
  	~Race();
    std::string getRace () const;
    void setRace ( std::string r );
    void afficheAnimal() const;
};

#endif


-race.cpp

#include "race.h"

using namespace std;

Race::Race( int nu, string no, old a, string nr) : Animal( nu, no, a), nom_r (nr) {
		//nom_r = nr;
}

Race::~Race () {

}

string Race::getRace () const {
	return nom_r;
}

void Race::setRace ( string r ){
}

void Race::afficheAnimal () const {
    afficheA();
    cout<<"Race : "<<nom_r<<endl;
}


-enclos.h

#ifndef DEF_ENCLOS_H
#define DEF_ENCLOS_H

class Enclos {
  private:
  // Associations
  // Attributes
    std::string nom;
    float surface;
  // Operations
  public:
    Enclos();
    Enclos(std::string, float);
    float getSurface () const;
    std::string getNom () const;
    void setNom ( std::string name );
};

#endif


-enclos.cpp

#include "enclos.h"

using namespace std;

Enclos::Enclos(string no, float s){
		  nom = no;
		  surface = s;
}

float Enclos::getSurface () const {
	return surface;
}

string Enclos::getNom () const {
	return nom;
}

void Enclos::setNom ( string name ){
	nom = name;
}


Voilà, merci d'avance pour votre aide!!!
A voir également:

2 réponses

Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
10 janv. 2010 à 19:28
Bonjour,

pour l'enclos tu as mis un protoype constructeur sans argument, mais tu ne l'as pas implémenté. Je ne suis pas sûr mais il me semble bien que ça cause une erreur. Si tu veux le constructeur par défaut, il ne faut rien mettre.
0
Sarvock Messages postés 20 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 3 mai 2010 11
10 janv. 2010 à 19:33
Et oui en effet l'erreur n'était où je croyais! Merci
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
10 janv. 2010 à 19:44
merci à toi d'avoir fait ll'effort de présenter clairement ton code et l'erreur obtenue, c'est agréable de t'aider, ce n'est pas le cas de tous ceux qui viennent poser leurs questions ici ;)
0