我有以下类,它有一个构造函数,它读入一个包含构造函数应该生成的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()
}
}
答案 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;