0

我想传递一个 fstream 对象并对单词进行标记。它总是会打印无法打开的文件hasNextToken()。愿有人帮助我。

//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;

        }
    }
};
4

2 回答 2

1

尝试这个:

class Tokenizer {
    fstream& fin;

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

...
}
于 2012-08-09T05:16:55.800 回答
0

我不确定这是否可行,我现在无法测试,但您可以快速完成:

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

干杯

于 2012-08-09T06:57:11.263 回答