2017-03-10 3 views
-1

J'ai la classe suivante qui a un constructeur qui lit dans un fichier txt qui contient la taille de object que le constructeur doit créer. Ensuite, j'ai besoin de la fonction read() pour reprendre l'arrêt du constructeur, mais pour une raison quelconque, il recommence en haut du fichier. Comment est-ce réglé?Utilisation de variables du constructeur dans la fonction membre

class Reader { 
public: 
    Reader(const char* file): _file(file) { 
     _ptr = 0; 
     ifstream _file(file); 

     _file >> word; 
     if(word!="BEGIN") { 
      //Raise error. 
     } 

     _file >> word; //Reads in next word. 
     if(word=="SIZE") { 
      _file >> size_x; 
      _file >> size_y; 

      _ptr = new Object(size_x,size_y); 
     } 
     else { 
      //Raise error. 
     } 

     _file >> word; 

     while(word=="POSITION") { 
      int readoutID; 
      int ix; 
      int iy; 
      _file >> readoutID >> ix >> iy; 

      //Set ID to position 

      _file >> word; 
     } 

     std::cout << "End of definition: " << word << std::endl; 
    } 

    bool read(){ 
     std::cout << word << std::endl; // This word should be the one where the constructor stopped. 
    //Returns False at the end if file. 
    } 

private: 
    Object* _ptr; 
    std::ifstream _file; 
    std::string word; 

Mon fichier principal ressemble à ceci:

int main(){ 

Reader r("file.dat"); 

while(r.read()) { 
//Function that prints out the values of read() 
} 

} 
+1

'_file' est à état. Vous devriez continuer là où le constructeur s'est arrêté pour lire automatiquement. Cela ne fonctionne-t-il pas pour vous? –

+0

comment appelez-vous 'read()'? et qu'est-ce que cela a à voir avec votre constructeur? – xander

+0

J'ai un petit fichier principal qui crée d'abord un objet de classe 'Reader' et ensuite j'appelle la fonction' read() '. Voir éditer. –

Répondre

0

De votre question je besoin de la fonction read() pour ramasser où le constructeur arrêté, mais pour une raison quelconque, il commence au sommet de le fichier à nouveau: vous n'utilisez pas this->_file mais vous créez une variable locale _file. Ainsi, l'état this->_file est le même que lors de son ouverture: début du fichier.

En outre, le constructeur n'est pas nommé correctement (CaloReader au lieu de Reader).

CaloReader(const char* file): _file(file) { 
    _ptr = 0; 
    ifstream _file(file); // local variable 
    _file >> word; 
+0

Comment utiliser exactement 'this -> _ file'? –

+0

Apprenez-vous le C++? 'this -> _ file' indique simplement que vous utilisez les attributs _file. Vous pouvez également simplement supprimer la déclaration de variable (comme indiqué dans ma réponse). Cependant, vu votre besoin, vous devez déplacer le code qui lit les mots en dehors du constructeur: il doit aller dans la méthode read. – NoDataFound