2011-06-09 9 views
2

J'essaie d'importer des données à partir d'un fichier dans mon projet, mais j'ai des problèmes pour trouver EOF. Tout d'abord, j'ai utilisé la fonction EOF comme une condition mais après avoir lu this, j'ai essayé de changer le code, mais encore il donne la même erreur. Sil te plait aide moi. MerciUtilisation de la fonction EOF comme condition

#include <iostream> 
#include <string> 
#include <fstream> 
using namespace std; 
class Rooms; 
class Guest; 
class MeetingRoomGuest; 
Rooms* r_ptr[999]; 
int r_count=0; 

ofstream infile("new.txt",ofstream::binary); 
while(infile.read((char *)(&r_ptr[r_count]),sizeof(Rooms))) 
{ 
    r_count++; 
} 
infile.close(); 
int main() 
{ 
    // some code here 
    return 0; 
} 

ERREUR:

error C2059: syntax error : 'while'

MISE À JOUR: S'il vous plaît laissez-moi savoir si cela est une meilleure mise en œuvre Merci

int main() 
{ 
    r_ptr[r_count]= new Rooms; 
    while(infile.read((&r_ptr[r_count]),sizeof(Rooms))) 
    { 
     r_ptr[++r_count]= new Rooms; 
     r_count++; 
    } 
    infile.close(); 
    //some code here 
} 

Je reçois toujours une erreur ,

ERREUR:

error C2039: 'read' : is not a member of 'std::basic_ofstream<_Elem,_Traits>'

MISE À JOUR: Merci beaucoup. Le code a finalement fixé, voici la mise en œuvre finale,

int main() 
{ 
    r_ptr[r_count]= new Rooms; 
    while(infile.read((char *)(&r_ptr[r_count]),sizeof(Rooms))) 
    { 
     r_count++; 
     r_ptr[r_count]= new Rooms; 

    } 
    infile.close(); 
    // some work 
} 
+1

Après avoir dépassé les problèmes de syntaxe et de compilation, il y a un sérieux problème de conception: essayer de lire ou écrire des pointeurs bruts comme 'char []' ne fera jamais ce que vous voulez. Lisez à propos de la sérialisation. – aschepler

+0

@ aschepler, Oh! Désolé, j'ai presque oublié d'allouer de la mémoire pour eux. Thankyou :) –

+0

vous incrémentez r_count une à plusieurs fois dans la boucle. try - r_ptr [r_count] = nouvelles chambres; et cette ligne r_ptr [r_count] = new Rooms; avant que la boucle while soit inutile – daven11

Répondre

3

Il semble que vous avez un ou deux problèmes de syntaxe:

  1. vous avez du code en dehors d'une fonction ou d'une fonction principale (les commandes while et infile), elles doivent être placées dans main ou dans une fonction.

  2. votre deuxième en a besoin d'un do (do{....}while(1), aussi il fonctionne toujours

  3. Toutes vos variables sont définies en dehors de main. Cela les rend variables globales, une chose à éviter autant que possible. Ils devraient être déplacé à l'intérieur main ainsi

  4. ofstream sont utilisés pour la sortie dans un fichier, vous voulez un ifstream pour obtenir l'entrée d'un fichier

+0

Merci. Mais je reçois toujours l'erreur, comment puis-je convertir un double pointeur en un pointeur char?: 'std :: basic_istream <_Elem, _Traits> :: read': impossible de convertir le paramètre 1 de 'Rooms **' en 'char *' –

+0

C'est parce que '(char *) (& r_ptr [r_count])' dit au programme de changez r_ptr (une pièce *) en char * et il n'a aucune idée de comment faire cela. La lecture et l'écriture de classes directement vers/depuis des fichiers est normalement une mauvaise idée. Si vous avez vraiment à alors @aschepler a raison - google sérialisation – Phil

3

Vous ne pouvez pas avoir un certain temps en dehors principal

int main() 
{ 
    ofstream infile("new.txt",ofstream::binary); 
    while(infile.read((char *)(&r_ptr[r_count]),sizeof(Rooms))) 
    { 
     r_count++; 
    } 
    infile.close(); 

    // some code here 
    return 0; 
} 
+0

Merci. Votre réponse a été très utile. –

Questions connexes