Bonjour à tous,
pour apprendre les différents modes d'écriture sur un fichier texte, je fait un petit programme avec un switch (lecture, écrasement, ajout, etc... mais il plante.
si je déclare un ofstream dans une fonction j'ai l'erreur de compilation

error: 'std::ios_base::ios_base(const std::ios_base&)' is private|
en fait mon problème est que si je déclare mon ofstream au début du fichier tout va bien mais cela ne me permet pas de choisir le mode d'ouverture avec un switch.
je suis certain que ma question est idiote mais ca fait des heures que j'essaie de contourner le problème en vain

merci de votre aide
Lucky
voici le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
#include<stdlib.h>
#include <string>
 
#include <fstream>
 
using namespace std;
 
struct Personne {    char nom[32], prenom[32], numero[20];};
string const lienFichier("F:\\prog\\tutosMateo\\scores.txt");
//ofstream monFlux(lienFichier.c_str());
//ofstream monFlux("F:\\prog\\tutosMateo\\scores.txt");
 
/******************************** FIN DES DECLARATIONS*********************************/
void remplit(ofstream monFlux){
 
    if(monFlux)// on teste si tout est ok
    {
      monFlux << "Bonjour, je suis une phrase écrite dans un fichier."  << endl;
      monFlux << 42.1337 << endl;
      int age(23);
      monFlux << "J'ai " << age << " ans." << endl;
 
    }
    else{
        cout <<"ERREUR impossible d'ouvrir le fichier"<<endl;
    }
    }
    /********************************************/
void ecrase(){
    ofstream monFlux(lienFichier.c_str());
    remplit(monFlux);
    }
/************************/
void complete(){
    ofstream monFlux(lienFichier.c_str(), ios::app);
    remplit(monFlux);
}
int main()
{
const int maxAdresses = 50;
Personne db[maxAdresses];
int nombreAdresses=0;
bool fin=false;
char choix;
 
    do{//pm c'est un do while
        cout << " 1) ouvrir le fichier en ecriture (ecrase)" << endl;
        cout << " 2) ajouter des donnees a la fin (append)" << endl;
        cout << " 3) lire en entier" << endl;
        cout << " 4) lire ligne par ligne" << endl;
        cout << " 5) lire mot par mot" << endl;
        cout << " 6) lire caractere par caractere" << endl;
        cout << "9) Quitter" << endl;
 
        cin >> choix;
 
        switch (choix)
            {
            case '1':   //ouvrir le fichier en ecriture (ecrase)
                ecrase();
                break;
            case '2':   //ajouter des donnees a la fin (append)
                complete();
                break;
            case '3':   //lire en entier
                fin=true;
                break;
            case '4':   //lire ligne par ligne
                fin=true;
                break;
            case '5':   //lire mot par mot
                fin=true;
                break;
            case '6':   //lire caractere par caractere
                fin=true;
                break;
            case '9':   //QUITTER
                fin=true;
                break;
 
            }
 
    }while(!fin);
    return 0;
   }