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. 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
    1. Tu appelles bien tes structures de cette manière :

      Ma_structure.ma_variable; ?

      Penses a la POO sinon ;)
      1. oui mes structure comme cela.
        pour la POO on a pas encore appris.
        1. pas de probleme,
          je t'envoie un zip avec tout les les fichier
          PS:le mail est envoyé
          1. Rien recu. vérifies que c'est bien univ et non unis, j'ai changé entre temps.
            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. PLutot que faire des include "machin.h", mais tes include sur "machin.cpp"
                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