Questions sur ofstream et création d'une instance de classe
Bonjour à tous,
Voilà je commence le C++ et j'ai essayé de faire un petit programme qui écrit du texte dans un fichier. Ce programme est le suivant :
Code:
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
| #include <iostream>
#include <fstream>
#include <stdio.h>
#include <windows.h>
using namespace std;
class TestFichier {
string nomFichier;
ofstream fichier;
public :
TestFichier();
void ajoutTexte(string texte);
void finFichier();
};
TestFichier::TestFichier(){
nomFichier = "fichier.txt";
ofstream fichier(nomFichier.c_str(), ios::trunc);
if (!fichier){
cerr << "Erreur de création du fichier" << endl;
exit(1);
}
SYSTEMTIME dateSysteme;
GetSystemTime(&dateSysteme);
fichier << "--------------------------------------------" << endl;
fichier << "Fichier enregistré le ";
fichier << dateSysteme.wDay << "/" << dateSysteme.wMonth << "/" << dateSysteme.wYear << " à " << dateSysteme.wHour+1 << ":" << dateSysteme.wMinute << ":" << dateSysteme.wSecond << endl;
fichier << "--------------------------------------------" << endl;
}
void TestFichier::ajoutTexte(string texte){
fichier << "Ajout de texte" << endl;
fichier << texte << endl;
}
void TestFichier::finFichier(){
fichier.close();
}
int main(){
TestFichier *test = new TestFichier();
test->ajoutTexte("Test");
test->finFichier();
return 0;
} |
Je rencontre un problème (ou une erreur de ma part) car pour que la fonction ajoutTexte() marche je suis obligé de rajouter en début de cette fonction l'instruction suivante :
Code:
ofstream fichier(nomFichier.c_str(), ios::app);
Ou il faut que je mette à la place de
Code:
ofstream fichier(nomFichier.c_str(), ios::trunc);
dans le constructeur :
Code:
ofstream fichier(nomFichier.c_str(), ios::in|ios::out);
Je ne sais pas si c'est normale ou que j'ai fait une erreur.
Sinon, j'ai rencontré un autre problème pour créér une instance de cette classe. J'avais essayé de le faire de cette manière :
Code:
1 2 3 4 5 6 7 8 9 10
| int main(){
TestFichier test();
test.ajoutTexte("Test");
test.finFichier();
return 0;
} |
Mais ça ne marche pas j'ai l'erreur suivante :
testFichier.cc: In function `int main()':
testFichier.cc:53: error: request for member `ajoutTexte' in `test', which is of non-class type `TestFichier ()()'
testFichier.cc:55: error: request for member `finFichier' in `test', which is of non-class type `TestFichier ()()' .
Si quelqu'un pouvait me donner quelques précisions sur pourquoi je suis obligé de passer par un pointeur : TestFichier *test = new TestFichier();, pour appeler les fonctions de la classe TestFichier. Ca serait sympa.
Merci d'avance pour vos réponses