2012-08-09 236 views
0

我想传递一个fstream对象并标记这些单词。它会一直打印无法打开文件hasNextToken()。愿有人帮助我。fstream文件无法读取

//main.cpp

int main() { 
    string filename = "input.txt"; 
    fstream inputStream(filename); 
    Tokenizer t(inputStream); 
    while (t.hasNextToken()) { 
    cout << t.nextToken(); 
} 
} 

//Tokenizer.h

class Tokenizer { 
    fstream fin; 

public: 
    Tokenizer(fstream& file) 
    { 
     fin << file; 
    } 

    bool hasNextToken() { 
     if (!fin) { 
      cout << "Could not open file: " << endl; 
      exit(0); 
     } 
     return true; 
    } 

    string nextToken() { 
     string line; 
     getline(fin, line); 
     if (fin) { 
      istringstream sin(line); 
      string word; 
      sin >> word; 
      return word; 

     } 
    } 
}; 
+0

错误信息? – 2012-08-09 05:12:00

+1

'fin'永远不会被初始化。 – 2012-08-09 05:12:19

+0

我将它添加到初始化程序列表中,但出现有关访问在ios中声明的私有成员的错误。 – newbieLinuxCpp 2012-08-09 05:24:19

回答

1

试试这个:

class Tokenizer { 
    fstream& fin; 

public: 
    Tokenizer(fstream& file) 
    : fin(file) 
    {} 

... 
} 
+0

如果我这样做,我得到这个错误:\ fstream(1347):错误C2248:'std :: basic_ios <_Elem,_Traits> :: basic_ios':无法访问类中声明的私人成员'std :: basic_ios <_Elem,_Traits >' – newbieLinuxCpp 2012-08-09 05:20:52

+0

这看起来像是你错过了从'fstream fin'到'fstream & fin;'的变化。 – Axel 2012-08-09 05:29:06

+0

谢谢,现在它打印出文本文件的内容,但带有额外的垃圾。 – newbieLinuxCpp 2012-08-09 05:59:55

0

我不知道这是否会工作,我可以现在不用测试,但你可以快速完成:

int main() { 
    string filename = "input.txt"; 
    fstream inputStream(filename, ios::in); // add second argument 
    // other stuff here 
} 

干杯