Tom's Guide > Forum > Programmation > C++ : Probleme redeclaration ofstream[RESOLU]

C++ : Probleme redeclaration ofstream[RESOLU]

Forum Programmation : C++ : Probleme redeclaration ofstream[RESOLU]

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonjours,
Je suis entrain d'apprendre le C++ et un problem me resiste au niveau des flux d' E/S.

voici le code me posant probleme :

Code :
  1. ofstream f(sFichierNom);
  2. if (!f.is_open())
  3. {
  4.     cout << "une erreur est survenue durant l'ouverture du fichier \"" << sFichierNom << "\"" << endl;
  5.     system("PAUSE" );
  6.     exit(1);
  7. }
  8. f << "Prenom : " << Etudient[nNombre2Compte].sPrenom << endl <<
  9. "Nom : " << Etudient[nNombre2Compte].sNom << endl <<
  10. "Nombre de Note : " << Etudient[nNombre2Compte].nNombre2Note;
  11. f.close();
  12. //augmentation du nombre de compte
  13. nNombre2Compte++;
  14. ofstream f("parametre.txt" );
  15. if (!f.is_open())
  16. {
  17.     cout << "une erreur est survenue durant l'ouverture du fichier \"parametre.txt\"" << endl;
  18.     system("PAUSE" );
  19.     exit(1);
  20. }
  21. f << "Nombre de compte : " << nNombre2Compte;
  22. f.close();


Je pense que le problème vien d'une redeclaration du a un probleme de destructeur avec ofstream.

voici les erreurs à la compilation ( Dev-C++) :
In function `int main(int, char**)':
122 redeclaration of `std::ofstream f'
109 `std::ofstream f' previously declared here
135 jump to case label
109 crosses initialization of `std::ofstream f'.

Merci de votre aide.

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

Bonsoir,

tu as deux fois la déclararion de "f":
ofstream f(sFichierNom);
ofstream f("parametre.txt" );

Soit tu supprimes le deuxième, et tu ouvres simplement le deuxième fichier avec :
f.open( ...)

soit tu changes de nom de variables pour la deuxième déclaration :
ofstream f2("parametre.txt" );

Répondre à ataofeal

Merci ataofeal, mais même après correction de cette erreur j'ai toujours un erreur :

In function `int main(int, char**)':
135 jump to case label
122 crosses initialization of `std::ofstream f4'
109 crosses initialization of `std::ofstream f3'

150 jump to case label
122 crosses initialization of `std::ofstream f4'
109 crosses initialization of `std::ofstream f3'

168 jump to case label
122 crosses initialization of `std::ofstream f4'
109 crosses initialization of `std::ofstream f3'

135 [Warning] destructor needed for `f4'
135 [Warning] where case label appears here
135 [Warning] (enclose actions of previous case statements requiring destructors in their own scope.)

puis après ca se repete.

voici le code en entier :

Code :
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <fstream>
  4. #include <stdio.h>
  5. using namespace std;
  6. #define NOMBRE_MAX_ELEVE 50
  7. #define NOMBRE_MAX_NOTE 50 //par eleve
  8. int main(int argc, char *argv[])
  9. {
  10.     //creation de la classe eleve
  11.     class eleve
  12.     {
  13.           public:
  14.           string sNom;
  15.           string sPrenom;
  16.           string sClasse;
  17.           float fMoyenne;
  18.           int nNombre2Note;
  19.           int nNotes[50];
  20.           //constructeur
  21.           eleve()
  22.           {
  23.                 sNom = "";
  24.                 sPrenom = "";
  25.                 sClasse = "";
  26.                 fMoyenne = 0.0;
  27.                 nNombre2Note = 0;
  28.                 nNotes[NOMBRE_MAX_NOTE] = (0);
  29.           };
  30.           //fonction qui ajoute une note
  31.           void AjoutNote(int nNouvelleNote, eleve* moi)
  32.           {
  33.               int nSommeNote = 0;
  34.               moi->nNotes[moi->nNombre2Note] = nNouvelleNote;
  35.               nNombre2Note++;
  36.               //calcule moyenne
  37.               for(int i = 0; i < moi->nNombre2Note; i++)
  38.               {
  39.                       nSommeNote += nNotes[i];
  40.               }
  41.               moi->fMoyenne = nSommeNote / moi->nNombre2Note;
  42.           }
  43.     };
  44.     // declaration des variables
  45.     int nNouvelleNote = 0, nChoix = 0, i = 0, nNombre2Compte;
  46.     char sFichierNom[10] = "";
  47.     FILE* fFichier = NULL;
  48.     eleve* Etudient;
  49.     //recuperation du Nombre de compte
  50.     ifstream f1("parametre.txt" );
  51.     if (!f1.is_open())
  52.     {
  53.                 cout << "une erreur est survenue durant l'ouverture du fichier \"parametre.txt\"" << endl;
  54.                 system("PAUSE" );
  55.                 exit(1);
  56.     }
  57.     f1.seekg(19);
  58.     f1 >> nNombre2Compte;
  59.     f1.close();
  60.     //recuperation des informations
  61.     Etudient = new eleve[NOMBRE_MAX_ELEVE];
  62.     for (i = 0; i < NOMBRE_MAX_ELEVE; i++)
  63.     {
  64.         if (i < nNombre2Compte)
  65.         {
  66.               sprintf(sFichierNom, "Compte\\%Ld.txt", i);
  67.               ifstream f2(sFichierNom);
  68.               if (!f2.is_open())
  69.               {
  70.                   cout << "une erreur est survenue durant l'ouverture du fichier \"" << sFichierNom << "\"" << endl;
  71.                   system("PAUSE" );
  72.                   exit(1);
  73.               }
  74.               f2.seekg(9);
  75.               f2 >> Etudient[i].sPrenom;
  76.               f2.seekg(18+sizeof(Etudient[i].sPrenom));
  77.               f2 >> Etudient[i].sNom;
  78.               f2.seekg(42+sizeof(Etudient[i].sPrenom)+sizeof(Etudient[i].sNom));
  79.               f2 >> Etudient[i].nNombre2Note;
  80.               f2.close();
  81.         }
  82.     }
  83.     while (1)
  84.     {
  85.             //affichage du menu principale
  86.             cout << "=== Gestionnaire d'eleve ===" << endl
  87.                 << "1.Creer un nouveau compte" << endl
  88.                 << "2.Lire les informations d'un eleve" << endl
  89.                 << "3.Ajouter une note a un eleve" << endl
  90.                 << "4.Quitter" << endl << endl;
  91.             cin >> nChoix;
  92.             if (nChoix == 4)
  93.               break;
  94.             switch(nChoix)
  95.             {
  96.                           // creation d'un nouveau eleve
  97.                           case 1 :
  98.                               //aquisition des données
  99.                               cout << "=== Nouvelle eleve ===" << endl
  100.                                     << "Entrez votre prenom : ";
  101.                               cin >> Etudient[nNombre2Compte].sPrenom;
  102.                               cout << "Entrez votre nom : ";
  103.                               cin >> Etudient[nNombre2Compte].sNom;
  104.                               //sauvegarde des données
  105.                               sprintf(sFichierNom, "Compte\\%Ld.txt", nNombre2Compte);
  106.                               ofstream f3(sFichierNom);
  107.                               if (!f3.is_open())
  108.                               {
  109.                                     cout << "une erreur est survenue durant l'ouverture du fichier \"" << sFichierNom << "\"" << endl;
  110.                                     system("PAUSE" );
  111.                                     exit(1);
  112.                               }
  113.                               f3 << "Prenom : " << Etudient[nNombre2Compte].sPrenom << endl <<
  114.                                 "Nom : " << Etudient[nNombre2Compte].sNom << endl <<
  115.                                 "Nombre de Note : " << Etudient[nNombre2Compte].nNombre2Note;
  116.                               f3.close();
  117.                               //augmentation du nombre de compte
  118.                               nNombre2Compte++;
  119.                               ofstream f4("parametre.txt" );
  120.                               if (!f4.is_open())
  121.                               {
  122.                                     cout << "une erreur est survenue durant l'ouverture du fichier \"parametre.txt\"" << endl;
  123.                                     system("PAUSE" );
  124.                                     exit(1);
  125.                               }
  126.                               f4 << "Nombre de compte : " << nNombre2Compte;
  127.                               f4.close();
  128.                               cout << "le compte a ete cree" << endl;
  129.                               system("PAUSE" );
  130.                               break;
  131.                           //Lire informations
  132.                           case 2 :
  133.                               cout << "Entrez le numero de l'eleve : ";
  134.                               cin >> nChoix;
  135.                               if (nChoix >= nNombre2Compte)
  136.                               {
  137.                                           cout << "Le numero est incorrect" << endl;
  138.                                           system("PAUSE" );
  139.                                           break;
  140.                               }
  141.                               cout << "Prenom : " << Etudient[nChoix].sPrenom << endl
  142.                                     << "Nom : " << Etudient[nChoix].sNom << endl
  143.                                     << "Nombre de Note : " << Etudient[nChoix].nNombre2Note << endl;
  144.                                     system("PAUSE" );
  145.                               break;
  146.                           // Ajout d'une note
  147.                           case 3 :
  148.                               nNouvelleNote = 0;
  149.                               nChoix = 0;
  150.                               cout << endl
  151.                                     << "Entrez votre note : ";
  152.                               cin >> nNouvelleNote;
  153.                               Etudient[nChoix].AjoutNote(nNouvelleNote, &Etudient[nChoix]);
  154.                               cout << "Vous avez " << Etudient[nChoix].nNombre2Note << " Note";
  155.                               if (Etudient[nChoix].nNombre2Note > 1)
  156.                                   cout << "s";
  157.                               cout << endl
  158.                                     << "votre moyenne est de " << Etudient[nChoix].fMoyenne << endl
  159.                                     << endl
  160.                                     << "1. Entrer une nouvelle note" << endl
  161.                                     << "2. Quitter." << endl;
  162.                                     cin >> nChoix;
  163.                               system("PAUSE" );
  164.                               break;
  165.                           default :
  166.                                   cout << "Entree incorrect" << endl;
  167.                                   system("PAUSE" );
  168.                                   break;
  169.             }
  170.             nChoix = 0;
  171.             cout << endl << endl;
  172.     }
  173.    
  174.        
  175.     return EXIT_SUCCESS;
  176. }


ou pour qu'il soit plus si lisible il est disponible a cette adresse : "http://perso.wanadoo.fr/foxnounours/main.cpp"

merci de m aider.

Répondre à grosnounours@IDN

Le problème n'est plus le même, il vient de la déclaration de tes variables f3 et f4 à l'intérieur des switch.
C++ ne tolère pas ce genre de déclaration.
Pour tricher, tu peux faire ça :

Code :
  1. switch(nChoix){
  2.     case 1:{//accolade ouvrante
  3.           ...
  4.           ofstream f3(sFichierNom);
  5.           ...
  6.           break;
  7.           }//accolade fermante
  8.     case 2: ...
  9. }

Répondre à ataofeal

Merci =) ça marche maintenant

sinon completement hors sujet mes c'est quoi les balises pour le code ?

Répondre à grosnounours@IDN

Tu as un bouton code qui met les tags [ c o d e ][ / c o d e ]

Répondre à CRicky

les bouton de code marche pas chez moi comme les lien vers les adress exterieur au site d'ailleur.

Merci

sinon pourraige savoir la fonction qui permet d aller a la fin du fichier svp a la place de cette boucle :

Code :
  1. while(1)
  2. {
  3.     cTampon = f.getchar();
  4.     if(cTampon == EOF)
  5.         break;
  6. }



voila

Répondre à grosnounours@IDN
Tom's Guide > Forum > Programmation > C++ : Probleme redeclaration ofstream[RESOLU]
Aller à :

Il y a 2526 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens