Variable non reconnu

Résolu
Bonjour,
je suis en dut informatique et on ma donné un projet a faire en compilation séparée
et quand je compile l'obtient cette erreur 'region' was not declared in this scope et ceci pour tout les variable déclare dans les autre entêtes sauf ensemble.h
alors que j'ai tout défini dans les entêtes écrit ci-dessous.

//ensemble.cpp
#include <iostream>
#include "ensemble.h"
#include "animal.h"
#include "region.h"
#include "vivre.h"

PS: Je compile sous g++
merci de mon répondre
Configuration: Linux
Mozilla 1.9.1.6

15 réponses

  1. Bon, deja, dans ton ensemble.h, tu utilises des variables appartenant à d'autres .h, donc tu rajoutes des include :

    #include "region.h"
    #include "animal.h"
    #include "vivre.h"


    Ensuite, Tu utilises des références, c'est bien, mais autant les protéger et utiliser des références constantes, ca corrige d'autres erreurs, donc tu as ca :

    //ajoute une region a l'ensemble
    void ajoutregion(const region &,tabregion*,int&);
    
    //ajoute un animal à l'ensemble
    void ajoutanimal(const animal &,tabanimaux*,int&);
    
    //aloute vivre dans l'ensemble des vivre
    void ajoutvivre(const vivre &,tabvivre*,int&);


    Jcontinue de regarder
    1. PLutot que faire des include "machin.h", mais tes include sur "machin.cpp"
      1. je vous donne les .cpp mais sa va etre long (+ 500 lignes)

        //animal.cpp
        #include "animal.h"
        #include <iostream>

        #include <string.h>
        using namespace std;

        //entrer les valeurs pour un animal
        animal entreanimal(int &ref){
        animal a;
        a.reference=ref;
        cout<<"Entrer le nom de l'animal : ";
        cin>>a.noma;
        cout<<"Entrer une classification : "<<endl;
        a.classification=entreclassi();
        cout<<"Entrer la durre de vie moyenne : ";
        cin>>a.dureedeviemoy;
        ref++;
        }

        //entre la classification d'un animal
        classi entreclassi(){
        int choix;
        bool correct;
        classi classi;
        cout<<"C'est un : "<<endl
        <<"1-mammifere"<<endl
        <<"2-oiseau"<<endl
        <<"3-reptile"<<endl
        <<"4-amphibien"<<endl
        <<"5-mollusque"<<endl
        <<"6-arthropode"<<endl
        <<"7-autres invertebres"<<endl
        <<"Entrer votre choix :";
        cin>>choix;
        while(correct){
        if(choix<1 || choix>7){
        cout<<"choix incorrect"<<endl;
        cin>>choix;
        }
        else
        correct=false;
        }
        switch(choix){
        case 1: classi=mammifere;break;
        case 2: classi=oiseau;break;
        case 3: classi=reptile;break;
        case 4: classi=amphibien;break;
        case 5: classi=mollusque;break;
        case 6: classi=arthropode;break;
        case 7: classi=autre_invertebres;break;
        }
        return classi;
        }

        //affiche la classification
        void afficheclassi(classi e){
        switch(e){
        case mammifere: cout<<"mammifere";break;
        case oiseau: cout<<"oiseau";break;
        case reptile: cout<<"reptile";break;
        case amphibien: cout<<"amphibien";break;
        case mollusque: cout<<"mollusque";break;
        case arthropode: cout<<"arthropode";break;
        case autre_invertebres: cout<<"autres invertebres";
        }
        cout<<endl;
        }

        //affiche un animal
        void afficheranimal(animal&a){
        cout<<"Reference : "<<a.reference<<endl;
        cout<<"Nom : "<<a.noma<<endl;
        cout<<"Classification : ";
        afficheclassi(a.classification);
        cout<<"Duree de vie moyenne : "<<a.dureedeviemoy<<endl<<endl;
        }

        //modifie la duree moyenne de vie d'un animal
        void modifdureevie(animal &a){
        cout<<"Entrer la nouvelle duree de vie moyenne : ";
        cin>>a.dureedeviemoy;
        }

        //renvoie la duree moyenne de vie d'un animal
        int renvoiedureevie(animal&a){
        return a.dureedeviemoy;
        }

        //renvoie la reference d'un animal
        int renvoiref(animal&a){
        return a.reference;
        }

        //renvoie la classification d'un animal
        char renvoieclassif(animal&a){
        return a.classification;
        }

        //affiche les animaux dont la durée de vie est superieur a une valeur donnée
        void afficheanisupvaldon(tabanimaux*A,int vie){
        for(int i=0;i<TAILLEMAX;i++){
        if(renvoiedureevie((*A[i]))>vie)
        afficheranimal((*A[i]));
        }
        }

        //affiche les animaux ayant une meme classification
        void afficheaniclass(tabanimaux *tani,classi c){
        for(int i=0;i<TAILLEMAX;i++){
        if(renvoieclassif((*tani[i]))==c)
        afficheranimal((*tani[i]));
        }
        }

        //affiche tout les animaux de l'ensemble animaux
        void afficheensembleani(tabanimaux *tab,int index){
        for(int i=0;i<=index;i++){
        afficheranimal((*tab[i]));
        }
        }

        //tri les animaux par classification
        void trianiclass(tabanimaux* tab){
        int j;
        animal aux;
        for(int i=1;i<TAILLEMAX;i++){
        aux=(*tab[i]);
        for(j=i;j>0;i--){
        if(renvoieclassif((*tab[j-1]))>renvoieclassif((*tab[j])))
        (*tab[j])=(*tab[j-1]);
        if(renvoieclassif((*tab[j-1]))==renvoieclassif((*tab[j])) && strcmp((*tab[j-1]).noma,(*tab[j]).noma)>0)
        (*tab[j])=(*tab[j-1]);
        }
        (*tab[j])=aux;
        }
        }

        //vivre.cpp

        #include <iostream>
        #include "vivre.h"

        using namespace std;

        //rentre les valeur pour une occurence de vivre
        vivre creervivre(){
        vivre v;
        cout<<"Entrer la reference de l'animal :";
        cin>>v.ref;
        cout<<"Entrer le nom de la region :";
        cin>>v.nomr;
        cout<<"Entrer la population de l'animal :";
        cin>>v.nombre;
        char rep;
        cout<<"L animal est il menace? (o)ui ou (n)on?";
        cin>>rep;
        if(rep=='o'||rep=='O')
        v.menace=true;
        else
        v.menace=false;
        return v;
        }

        //affiche vivre
        void affichervivre(vivre &v){
        cout<<"La reference de l'animal :"<<v.ref<<endl;
        cout<<"Le nom de la region :"<<v.nomr<<endl;
        cout<<"La population est de :"<<v.nombre<<endl;
        if(v.menace)
        cout<<"L'animal est menace"<<endl;
        else
        cout<<"L'animal n'est pas menace"<<endl;
        }

        //affiche vivre
        void modifnombre(int &n){
        cout<<"Entrer le nouveau nombre de population :";
        cin>>n;
        }

        //modifie si l'animal est menace ou pas
        void modifmenace(bool &b){
        b=!b;
        }

        //renvoie la references d'un animal
        int renvoieref(vivre &v){
        return v.ref;
        }

        //renvoie le nom de la region
        char* renvoienomreg(vivre &v){
        return v.nomr;
        }

        //renvoie la population
        int renvoienombre(vivre &v){
        return v.nombre;
        }

        //renvoie si l'animal est menace ou pas
        bool renvoiemenace(vivre &v){

        return v.menace;
        }

        void afficheensemblevivre(tabvivre *tab,int index){
        for(int i=0;i<=index;i++){
        vivre a=(*tab[i]);
        affichervivre(a);
        }
        }

        //region.cpp

        #include "region.h"
        #include <iostream>

        using namespace std;

        //affichage de la région étant donné un type de région
        void affichetype (typere t){
        cout<<"Type : ";
        switch(t){
        case volcanique : cout<<"volcanique";break;
        case desertique : cout<<"desertique";break;
        case steppe : cout<<"steppe";break;
        case glaciere : cout<<"glaciere";break;
        case eau_tropical : cout<<"eau tropical";break;
        case eau_tempere : cout<<"eau tempere";break;
        case eau_polaire : cout<<"eau polaire";break;
        case tempere : cout<<"tempere";break;
        case ville : cout<<"ville";
        }
        }

        void affichehemis (hemis h){
        cout<<"Hemisphere : ";
        switch(h){
        case nord : cout<<"nord"<<endl;break;
        case sud : cout<<"sud"<<endl;
        }
        }

        void afficheregion (region &r){
        cout<<"nom de region : "<<r.nomr<<endl;
        affichetype(r.typeregion);
        cout<<endl<<"densité : "<<r.densite<<endl;
        affichehemis(r.hemisphere);
        }

        typere entretypere(){
        int choix;
        bool correct=true;
        typere classi;
        cout<<"C'est un : "<<endl
        <<"1-volcanique"<<endl
        <<"2-desertique"<<endl
        <<"3-steppe"<<endl
        <<"4-glaciere"<<endl
        <<"5-eau_tropical"<<endl
        <<"6-eau_tempere"<<endl
        <<"7-eau_polaire"<<endl
        <<"8-tempere"<<endl
        <<"9-ville"<<endl
        <<"Entrer votre choix :";
        cin>>choix;
        while(correct){
        if(choix<1 || choix>9){
        cout<<"choix incorrect"<<endl;
        cin>>choix;
        }
        else
        correct=false;
        }
        switch(choix){
        case 1: classi=volcanique;break;
        case 2: classi=desertique;break;
        case 3: classi=steppe;break;
        case 4: classi=glaciere;break;
        case 5: classi=eau_tropical;break;
        case 6: classi=eau_tempere;break;
        case 7: classi=eau_polaire;break;
        case 8: classi=tempere;break;
        case 9: classi=ville;break;
        }
        return classi;
        }

        hemis saisiehemis(){
        int choix;
        bool correct=true;
        hemis hemi;
        cout<<"Qu'elle est l'hemisphere de la region"<<endl
        <<"1-Sud"<<endl
        <<"2-Nord"<<endl;
        cin>>choix;
        while(correct){
        if(choix<1 || choix>2){
        cout<<"choix incorrect"<<endl;
        cin>>choix;
        }
        else
        correct=false;
        }
        switch(choix){
        case 1: hemi=sud;break;
        case 2: hemi=nord;break;

        }
        return hemi;
        }

        region rentreregion(){
        region r;
        cout<<"Entrer le nom de la region";cin>>r.nomr;
        cout<<"Entrer le type de region";r.typeregion=entretypere();
        cout<<"Entrer la densité d'une region";cin>>r.densite;
        cout<<"Entrer l'hemishere de la region";r.hemisphere=saisiehemis();
        return r;
        }

        char renvoietyper(region &r){
        return r.typeregion;
        }

        int renvoiedensite(region &r){
        return r.densite;
        }

        char renvoiehemis(region &r){
        return r.hemisphere;
        }

        void afficheregiontype(tabregion *tab,typere t){

        for(int i=0;i<TAILLEMAX;i++){

        if(renvoietyper((*tab[i]))==t)

        afficheregion((*tab[i]));

        }

        }

        void afficheregionplusgrandedens(tabregion *tab){

        int aux=0;
        for(int i=0;i<TAILLEMAX;i++){

        if( (*tab[i]).densite > (*tab[aux]).densite )

        aux=i;
        }
        afficheregion((*tab[aux]));
        }

        void afficheensemblereg(tabregion *tab,int index){

        for(int i=0;i<=index;i++){

        afficheregion((*tab[i]));

        }

        }

        //ensemble.cpp

        #include <iostream>
        #include "ensemble.h"
        #include "animal.h"
        #include "region.h"
        #include "vivre.h"
        #define TAILLEMAX 100

        using namespace std;

        //ajoute une region dans l'ensemble des regions
        void ajoutregion(region &r, tabregion *tabr,int &i){
        tabr[i]=r;
        i++;
        }

        //ajoute un animal dans l'ensemble des animaux41
        void ajoutanimal(animal &r, tabanimaux *tabr,int &i){
        tabr[i]=r;
        i++;
        }

        //ajoute vivre a l'ensemble des vivres
        void ajoutvivre(vivre &v, tabvivre *tab,int &i){
        tab[i]=v;
        i++
        }

        //supprime le premier animal de l'ensemble
        void supprimeranimal(tabanimaux *tab,int &index){
        for(int i=0;i<TAILLEMAX-1;i++){
        tab[i]=tab[i+1];
        index--;
        }
        }

        //supprime la première region de l'ensemble
        void supprimeregion(tabregion *tab,int &index){
        for(int i=0;i<TAILLEMAX-1;i++){
        tab[i]=tab[i+1];
        index--;
        }
        }

        //supprime le premier vivre du tableau
        void supprimervivre(tabvivre *tab,int &index){
        for(int i=0;i<TAILLEMAX-1;i++){
        tab[i]=tab[i+1];
        index--;
        }
        }

        //recherche un animal si il est presence dans l'ensemble animal
        bool presenceanimal(tabanimaux *tab,int ref){
        bool trouver=false;
        for(int i=0;i<TAILLEMAX && !trouver;i++){
        if(tab[i].reference==ref)
        trouver=true;
        }
        return trouver;
        }

        //recherche si la region est presente dans l'ensemble region
        bool presenceregion(tabanimauxregion *tab,char ref){
        bool trouver=false;
        for(int i=0;i<TAILLEMAX && !trouver;i++){
        if(tab[i].nomr==ref)
        trouver=true;
        }
        return trouver;
        }

        //recherche si la region est dans l'ensemble vivre
        bool presencevivreregion(tabvivre *tab,char ref){
        bool trouver=false;
        for(int i=0;i<TAILLEMAX && !trouver;i++){
        if(tab[i].nomr==ref)
        trouver=true;
        }
        return trouver;
        }

        //recherche si l'animal est present dans l'ensemble vivre
        bool presencevivreanimal(tabvivre *tab,int ref){
        bool trouver=false;
        for(int i=0;i<TAILLEMAX && !trouver;i++){
        if(tab[i].reference==ref)
        trouver=true;
        }
        return trouver;
        }

        //
        void affichepoptotani(tabvivre *tab,animal &a){
        int aux=0;
        for(int i=0;i<TAILLEMAX && !trouver;i++){
        if(tab[i].reference==a.reference)
        aux+=tab[i].nombre;
        }
        cout<<"La population totale pour l'animal "<<a.noma<<" est : "<<aux<<endl<<endl;
        }

        void afficheaniref(tabanimaux* taba,int ref){
        bool trouver=false;
        for(int i=0;i<TAILLEMAX && !trouver;i++){
        if(tab[i].reference==ref){
        afficheranimal(tab[i]);
        trouver=true;
        }
        }
        }

        void affixheaniregion(tabvivre* tabv,region &r,tabanimaux* taba){
        for(int i=0;i<TAILLEMAX;i++){
        if(tabv[i].nomr==r.nom)
        afficheaniref(taba,tabv[i].ref);
        }
        }

        je n'ai pas fini de le debugger
        1. Rien recu. vérifies que c'est bien univ et non unis, j'ai changé entre temps.
          1. pas de probleme,
            je t'envoie un zip avec tout les les fichier
            PS:le mail est envoyé
            1. oui mes structure comme cela.
              pour la POO on a pas encore appris.
              1. Tu appelles bien tes structures de cette manière :

                Ma_structure.ma_variable; ?

                Penses a la POO sinon ;)
                1. je poste seulement les .h

                  //animal.h
                  #ifndef _ANIMAL
                  #define _ANIMAL

                  enum classi{mammifere,oiseau,reptile,amphibien,mollusque,arthropode,autre_invertebres};

                  #define TAILLEMAX 100

                  struct animal{
                  int reference;
                  char noma[TAILLEMAX];
                  classi classification;
                  int dureedeviemoy;
                  };

                  typedef animal tabanimaux[TAILLEMAX];

                  //entrer les valeurs pour un animal
                  void entreeanimal(int&);

                  //entre la classification d'un animal
                  classi entreclassi();

                  //affiche un animal
                  void afficheranimal(animal&);

                  //modifie la duree moyenne de vie d'un animal
                  void modifdureevie(animal&);

                  //renvoie la duree moyenne de vie d'un animal
                  int renvoiedureevie(animal&);

                  //renvoie la reference d'un animal
                  int renvoiref(animal&);

                  //renvoie le nom d'un animal
                  char renvoienom(animal&);

                  //renvoie la classification d'un animal
                  char renvoieclassif(animal&);

                  //affiche les animaux dont la durée de vie est superieur a une valeur donnée
                  void afficheanisupvaldon(tabanimaux*,int);

                  //affiche les animaux ayant une meme classification
                  void afficheaniclass(tabanimaux*,classi);

                  //affiche tout les animaux de l'ensemble animaux
                  void afficheensembleani(tabanimaux*,int);

                  //tri les animaux
                  void trianiclass(tabanimaux*);

                  #endif

                  //region.h
                  #ifndef _REGION
                  #define _REGION
                  #define TAILLEMAX 100

                  enum typere{volcanique,desertique,steppe,glaciere,eau_tropical,eau_tempere,eau_polaire,tempere,ville};

                  enum hemis{nord,sud};

                  struct region{
                  char nomr[TAILLEMAX];
                  typere typeregion;
                  int densite;
                  hemis hemisphere;
                  };

                  typedef region tabregion[TAILLEMAX];

                  //entre le type de region
                  typere entretypere();

                  //affiche le type de region
                  void affichetype (typere);

                  //affiche l'hemisphere
                  void affichehemis (hemis);

                  //renvoie le type de region
                  typere entretypreg();

                  //affiche la region
                  void afficheregion (region&);

                  //entre une region
                  region rentreregion();

                  char renvoienomr(region&);

                  char renvoietyper(region&);

                  int renvoiedensite(region&);

                  char renvoiehemis(region&);

                  //affiche les occurences d'une region

                  void afficheregiontype(tabregion*,typere);

                  //affiche la region ayant la plus grande densite

                  void afficheregionplusgrandedens(tabregion*);

                  //affiche toute les region dans l'ensemble

                  void afficheensemblereg(tabregion*,int);

                  #endif

                  //vivre.h
                  #ifndef _VIVRE
                  #define _VIVRE

                  #define TAILLEMAX 100

                  struct vivre{
                  int ref;
                  char nomr[TAILLEMAX];
                  int nombre;
                  bool menace;
                  };

                  typedef vivre tabvivre[TAILLEMAX];

                  //rentre les valeur pour une occurence de vivre
                  vivre creervivre();

                  //affiche vivre
                  void affichervivre(vivre&);

                  //modifie la population//affiche vivre
                  void modifnombre(int&);

                  //modifie si l'animal est menace ou pas
                  void modifmenace(bool&);

                  //renvoie la references d'un animal
                  int renvoieref(vivre&);

                  //renvoie le nom de la region
                  char* renvoienomreg(vivre&);

                  //renvoie la population
                  int renvoienombre(vivre&);

                  //renvoie si l'animal est menace ou pas
                  bool renvoiemenace(vivre&);

                  //affiche toute les "vivre" de l'ensemble
                  void afficheensemblevivre(tabvivre*,int);

                  #endif

                  //ensemble.h
                  ifndef ENSEMBLE_H
                  #define ENSEMBLE_H

                  #define TAILLEMAX 100

                  //ajoute une region a l'ensemble
                  void ajoutregion(region&,tabregion*,int&);

                  //ajoute un animal à l'ensemble
                  void ajoutanimal(animal&,tabanimaux*,int&);

                  //aloute vivre dans l'ensemble des vivre
                  void ajoutvivre(vivre&,tabvivre*,int&);

                  //supprime le premier animal de la region
                  void supprimeranimal(tabanimaux*,int&);

                  //supprime la première region de l'ensemble
                  void supprimeregion(tabregion*,int&);

                  //supprime le premier vivre du tableau
                  void supprimervivre(tabvivre *,int&);

                  //recherche un animal si il est presence dans l'ensemble animal
                  bool presenceanimal(tabanimaux*,int );

                  //recherche si la region est presente dans l'ensemble
                  bool presenceregion(tabanimauxregion*,char*);

                  //recherche si la region est dans l'ensemble vivre
                  bool presencevivreregion(tabvivre*,char*);

                  //recherche si l'animal est present dans l'ensemble vivre
                  bool presencevivreanimal(tabvivre*,int);

                  //affichge la population totale
                  void affichepoptotani(tabvivre*,int);

                  //affiche les animaux vivant dans un region donnée
                  void affixheaniregion(tabvivre*,region&,tabanimaux*);

                  #endif

                  Bonne lecture
                  vivre.cpp, animal.cpp, region.cpp compile sans probleme avec leur .h