我已經創建了一個解析器類來接收大量文本文件並執行各種操作。作爲這個類的成員,我有一個ifstream對象,它的縮寫爲ifstream fin
。我有一個函數void SetFile(char* filename)
,該函數接受一個C字符串文本,並且應該調用fin.open()
將該流連接到該文件,但由於某種原因,fin.fail()
在fin.open()
調用後立即返回true。這是我的解析器類,希望有人注意到我做錯了!謝謝你的時間。正確使用ifstream對象作爲類的成員
Parser.h
#ifndef PARSER_H
#define PARSER_H
#include <fstream>
#include <cstdlib>
#include "Heap.h"
#include "Word.h"
enum FILESTREAM_ERRORS{OPEN_ERROR};
class Parser
{
public:
Parser();
void SetFile(const char *filename);
void LoadHeap();
//private:
int word, line, paragraph;
ifstream fin;
Heap<Word> *wordheap;
void LoadWord();
};
Parser::Parser()
{
word = line = paragraph = 0;
}
void Parser::SetFile(const char* filename)
{
fin.open(filename);
if(fin.fail())
throw OPEN_ERROR;
}
void Parser::LoadWord()
{
QString wordstring;
char c;
fin.get(c);
if (c == '\n')
{
char p = fin.peek();
if (p == '\n')
{
fin.get(c);
paragraph++;
}
line++;
fin.get(c);
}
while (isblank(c))
fin.get(c);
while (!isblank(c))
wordstring.append(c);
word++;
cout << qPrintable(wordstring) << endl;
}
#endif // PARSER_H
提示:爲您的異常管理使用一個類(請參閱 http://www.cplusplus.com/reference/stdexcept/)。我建議std :: runtime_error或一個子類。 –
Geoffroy
2013-03-05 23:29:03
什麼是文件名?調試器顯示了什麼?如何調用SetFile?請發佈最少量的可重新編譯的代碼,包括預期和實際的輸入和輸出。 – 2013-03-05 23:35:29