Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
709 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Pb avec std::istream::read

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pb avec std::istream::read

n°520038
Enidan
Posté le 21-09-2003 à 21:52:37  profilanswer
 

Bonjour,
 
J'ai une classe avec le membre suivant :

Code :
  1. int NbRows;


Dans une fonction membre, j'ai écrit le code suivant :
 

Code :
  1. ifstream Stream;
  2. Stream.read(static_cast<char *>(&this->NbRows), sizeof(int));


 
Je compile avec gcc et j'ai l'erreur suivante :

invalid static_cast from type `int*' to type `char*'


Pourquoi ?
Comment utiliser la fonction read sur mon entier ?


Message édité par Enidan le 21-09-2003 à 21:53:24
mood
Publicité
Posté le 21-09-2003 à 21:52:37  profilanswer
 

n°520039
Taz
bisounours-codeur
Posté le 21-09-2003 à 21:53:09  profilanswer
 

reinterpret_cast ici

n°520041
Enidan
Posté le 21-09-2003 à 21:55:20  profilanswer
 

OK, merci

n°520042
Taz
bisounours-codeur
Posté le 21-09-2003 à 21:56:15  profilanswer
 

on est d'accord que ce sont des entrées/sorties binaires

n°520044
Enidan
Posté le 21-09-2003 à 22:00:54  profilanswer
 

tout à fait  :)

n°520045
Taz
bisounours-codeur
Posté le 21-09-2003 à 22:04:59  profilanswer
 

remarques : les conventions veulent que les identificateurs de variables ne commencent pas par des majuscules
 
 
stream.read(static_cast<char *>(&this->NbRows), sizeof this->NbRows);
 
me parait une écriture plus adéquouate et moi source d'erreur, plus flexible aux modifications de code (si tu change le type de NbRows, genre en unsigned long, faut tout refaire)

n°520054
Enidan
Posté le 21-09-2003 à 22:14:16  profilanswer
 

Taz a écrit :

remarques : les conventions veulent que les identificateurs de variables ne commencent pas par des majuscules


J'ai toujours entendu qu'il y avait plusieurs conventions. Est-ce qu'il y en a une qui est la "règle" ? peux-tu me donner le lien ?
 

Taz a écrit :

stream.read(static_cast<char *>(&this->NbRows), sizeof this->NbRows);
 
me parait une écriture plus adéquouate et moi source d'erreur, plus flexible aux modifications de code (si tu change le typede NbRows, genre en unsigned long, faut tout refaire)


C'est vrai, je vais le changer
 
 
Sinon, j'ai cette fois le pb avec la fonction write.
Voici le message d'erreur:

reinterpret_cast from `const int*' to `char*' casts  away const (or volatile)


Or, ma donnée membre n'est pas constante !

n°520057
Taz
bisounours-codeur
Posté le 21-09-2003 à 22:17:34  profilanswer
 

aucun lien
 
 
mais this doit l'être ! donc faut rajouter un const_cast.

n°520066
Enidan
Posté le 21-09-2003 à 22:25:11  profilanswer
 

Effectivement, ça compile :

Code :
  1. Stream.write(reinterpret_cast<char *>(const_cast<int *>(&this->NbRows)), sizeof(int));


 
C'est parce que la fonction membre où j'utilise le wrtie est déclarée constante, donc this est constant  :p  
 
Merci encore.

n°520067
Taz
bisounours-codeur
Posté le 21-09-2003 à 22:26:42  profilanswer
 

Citation :

sizeof(int)

 [:taz]

mood
Publicité
Posté le 21-09-2003 à 22:26:42  profilanswer
 

n°520097
Enidan
Posté le 21-09-2003 à 23:22:01  profilanswer
 

gloups !

n°520178
xiluoc
un pc pour les unirs ....
Posté le 22-09-2003 à 05:00:34  profilanswer
 

je ne comprend pas le code, elle fait quoi cette fonction ?
  :??:

n°520193
Taz
bisounours-codeur
Posté le 22-09-2003 à 07:47:20  profilanswer
 

xiluoc a écrit :

je ne comprend pas le code, elle fait quoi cette fonction ?
  :??:  

elle fait que tu vas acheter un bouquin

n°520229
xiluoc
un pc pour les unirs ....
Posté le 22-09-2003 à 09:45:51  profilanswer
 

Taz a écrit :

elle fait que tu vas acheter un bouquin


 
 
- computer science tapestry (Exploring Programming And Compuer Science with c++)
 
- Schaum's outline Data structures with c++ (j ai bien celui la)
 
    [:dams86]  
 


---------------
jeunes con de la derniere averse, vieux con des neiges d'antant.
n°520326
Taz
bisounours-codeur
Posté le 22-09-2003 à 13:06:07  profilanswer
 

inconnus au bataillon

n°520408
namewithn0​man
Posté le 22-09-2003 à 14:59:35  profilanswer
 

Y'aurait pas une possibilité d'utiliser un opérateur de flux ( >> )?
 
 
EDIT : Le reste j'ai effacer parce que j'avais mis une grosse clownerie  :lol:


Message édité par namewithn0man le 22-09-2003 à 15:12:54
n°520420
Taz
bisounours-codeur
Posté le 22-09-2003 à 15:12:00  profilanswer
 

namewithn0man a écrit :

Y'aurait pas une possibilité d'utiliser un opérateur de flux ?

Code :
  1. ifstream << (&this->NbRows);




ce qui écrit un truc du genre 0xdeadbeef, très utile
 

namewithn0man a écrit :

J'avais un pb de cast pour l'écriture dans un fichier (texte cette fois-ci). Je m'en suis sorti avec cet opérateur (le cast est automatique)

:heink:  
 

namewithn0man a écrit :

En plus c'est du vrai code pur C++ ANSI authentique(les méthodes de transtypage sont trop souvent propriétaires (genre itoa( : 100% MS))

meme si itoa existait en C++, je te dirai que ne pas l'utiliser

namewithn0man a écrit :


EDIT : Je me demande si je ne viens pas de poster une grosse clownerie... (en C++ je suis encore au stade du débutage). S'il y a erreur, quelqu'un pourrait corriger svp ? (aussi pour ma culture perso)


il semblerait bien

n°520425
namewithn0​man
Posté le 22-09-2003 à 15:14:40  profilanswer
 

Taz a écrit :


 
il semblerait bien


 
zut quelqu'un est passé par là avant que je me rende compte de mon incompétence en relisant mon post... Braf, quand on sait pas, faut s'écraser et pas faire le malin  :cry:

n°520427
Taz
bisounours-codeur
Posté le 22-09-2003 à 15:16:35  profilanswer
 

namewithn0man a écrit :


 
zut quelqu'un est passé par là avant que je me rende compte de mon incompétence en relisant mon post... Braf, quand on sait pas, faut s'écraser et pas faire le malin  :cry:  

je l'aurais pas dit comme ça, mais effectivement, quand on sait pas, mieux vaut ouvrir ses yeux, poser des questions et ne pas laisser galoper son esprit de débutant (voir le résultat plus haut  :D )
 
tout est ok ici ?

n°520431
namewithn0​man
Posté le 22-09-2003 à 15:20:37  profilanswer
 

Citation :


 :heink:  


 
et bien si je persiste
 

Code :
  1. outFile << "Contient " << missions.size() << " missions"<< std::endl;


 
sans cast explicite
 
EDIT: et en effet tout est ok. Je croyais avoir une solution, j'ai voulu participer pour une fois - pour rendre service... Jusque là j'ai quasiment toujours trouvé les réponses à mes questions en me promenant sur ce forum, j'ai voulu être fairplay et participer un peu.


Message édité par namewithn0man le 22-09-2003 à 15:25:02
n°520437
namewithn0​man
Posté le 22-09-2003 à 15:29:11  profilanswer
 

Il n'empêche que t'as beau être peut-être bon en C++, mais un pack de battlecruisers y fait pas long feu contre des carriers !  :)  (cf. nos signatures)

n°520439
Taz
bisounours-codeur
Posté le 22-09-2003 à 15:30:15  profilanswer
 

:heink: ²

n°520443
chrisbk
-
Posté le 22-09-2003 à 15:40:07  profilanswer
 


dans starcraft le battlecruiser il fait "good day commander" quand on cliquette dessus :O
 
(toi ca viendrait pas plutot du all your base are belong to us ?)

n°520444
Taz
bisounours-codeur
Posté le 22-09-2003 à 15:43:24  profilanswer
 

ça vous est jamais arrivé de vous faire griller d'une minute ?

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Pb avec std::istream::read

 

Sujets relatifs
comment faire un "read(mavar)" en pythoninteret du read par rapport au fread bufferisé
Buffer, fichier, read et freadopen, read, write sous linux j ai un chtit probleme
[JAVA] Socket UDP et InputStream, probleme de readread port COM non bloquant sous win :-( comment faire ?
C++ read-write access threadsafequestion sur "read" entre autres
Lecture d'un fichier... problème de Read !!!socket : pb read/write
Plus de sujets relatifs à : Pb avec std::istream::read


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR