在成员函数中使用构造函数中的变量

时间:2017-03-10 09:59:23

标签: c++ function file constructor member

我有以下类,它有一个构造函数,它读入一个包含构造函数应该生成的object大小的txt文件。然后我需要函数read()来获取构造函数停止的位置,但由于某种原因它再次从文件的顶部开始。这是如何解决的?

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;

我的主文件如下所示:

int main(){

Reader r("file.dat");

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

}

1 个答案:

答案 0 :(得分:0)

从您的问题我需要函数read()来获取构造函数停止的位置,但由于某种原因它再次从文件的顶部开始:您没有使用this->_file但是你创建了一个局部变量_file。因此,this->_file的状态与打开时的状态相同:文件的开头。

此外,构造函数未正确命名(CaloReader而不是Reader)。

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