sheorogath
Messages postés2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 2010
-
27 mai 2005 à 18:40
sheorogath
Messages postés2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 2010
-
28 mai 2005 à 10:53
bonjour a tous,
je voudrais savoir comment ecrire un vector dans un fichier sur mon disque dur
de sorte que je puisse le recuperer et recreer le vector au demarage de mon programme en gros c'est un fichier de sauvegarde mais le probleme c'est que j'ai aucune idee de comment faire et je n'ai rien trouver sur le net
"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
sheorogath
Messages postés2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 201017 27 mai 2005 à 20:13
merci mais ca marche pas :
tout d'abord mon vecteur et un vecteur d'un type que g creer:
Produit(nom,reserve);
apres dans le fichier principal g creer un vecteur global :
vectorstock;
sur lequelje peut faire beaucoup d'action et l'action qui me manque et cele de l'enregistrement et de la recuperation donc voila les deuc fonction d'ecriture et de lecture et ca ne passe pas le stade de la compilation :
void save()
{
fstream fichier( "vector.dae" , ios::in | ios::out | ios::binary );
// sauvegarde
for( int i = 0; i<stock.size() ; i++ )
fichier << stock[i] << " ";
} ;
void lecture(){
fstream fichier( "vector.dae" , ios::in | ios::out | ios::binary );
for( int i = 0; i<stock.size() ; i++ )
fichier >>stock[i];
};
voici l'erreur retourne par dev-cpp:
no match for 'operator<<' in 'fichier << (&stock)->std::vector<_Tp, _Alloc>::operator[] [with _Tp = Produit, _Alloc = std::allocator](((unsigned int)i))'
si tu veut la source de l'obet produit demande
mais merci
"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
sheorogath
Messages postés2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 201017 27 mai 2005 à 22:56
adapter a mon code ca donne :
friend ostream& operator P.getName() >> P.getReserve();
}
}
mais je ne sais pas ou le placer :
voici mes source :
/////////////////////produit.h///////////////////////
#ifndef PRODUIT_H
#define PRODUIT_H
#include
#include
using namespace std;
class Produit
{
public:
//constructeur principal
Produit();
// le lire pour le creer
void read();
//imprimer
void print() const;
//recupere le nom
string getName()const;
//recupere les reserve restantes
int getReserve()const;
//modifie le champs reserve
void setReserve();
private:
string name;
double reserve;
};
#endif
///////////////////// fin produit.h///////////////////////
mezaya
Messages postés202Date d'inscriptiondimanche 18 mai 2003StatutMembreDernière intervention 6 mars 2010 27 mai 2005 à 23:13
J'ai regarder vite fait et ça a l'air bon. mais tu peut utiliser
directement tes données privées au mieux de passer par une méthode. Je
crois que j'ai oublié de mettre des references pour ostream et istream
passer en parametre.
ça donne :
friend ostream& operator << ( ostream& o , const Produit& P )
{
return o << P.name << " " << P.reserve;
}
friend istream& operator >> ( istream& i , const Produit& P )
{
return i >> P.name >> P.reserve;
}
pour la gestion des fichiers elle se fait avec fstream.
ios::in ( normalement std::ios:in inutile car -> unsing namespace
std; ) permet d'ouvrir ton fichier en lecture. ios::out en ecriture et
créer si il n'existe de pas. ios::binary permet d'écrire autre chose
que tu texte ( attention probleme avec les opérateur << et
>> ).
il existe d'autre flags pour l'ouverture de fichier.
pour écrite et lire soit les opérateur << et >> soit la
fonction read et write. tu dois passer en parametre un pointeur de char
( donc char* ) et le nombre d'octet lu ou écrit.
sheorogath
Messages postés2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 201017 28 mai 2005 à 10:34
d'accord et pour la lecture je lit en comptan le normbre d'octet que je veut en sachant qu'un octet = 1caracter mais comme je ne compte pas m'amuser a compter le nombre de caracter qui se trouve dans mon objet yaurai pas une fontion de la std qui le ferai ?
"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
sheorogath
Messages postés2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 201017 28 mai 2005 à 10:53
en regardant ton fstream je vois que tu ne la declare qu'en lecture tu est sur que dans ton cas write marchera ?
je vien d'essaye encore tes surcharge d'operateur mais elle ne marche pas:
voici les erreur que le compilo me retourne (dev-cpp):
main.cpp:15: error: can't initialize friend function `operator<<'
main.cpp:15: error: friend declaration not in class definition
main.cpp:19: error: can't initialize friend function `operator>>'
main.cpp:19: error: friend declaration not in class definition
main.cpp: In function `std::istream& operator>>(std::istream&, const Produit&)':
main.cpp:20: error: no match for 'operator>>' in 'i >> Produit::getName() const()'
=> g ecris ca dans main.cpp:
friend ostream& operator << ( ostream& o , const Produit& P )
{
return o << P.getName() << " " << P.getReserve();
}
friend istream& operator >> ( istream& i , const Produit& P )
{
return i >> P.getName() >> P.getReserve();
}
"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"