C ++无法读取txt文件中的单词

时间:2012-11-11 17:29:54

标签: c++ file class text readfile

我正在尝试编写一个程序来读取文本文件中的单词。最后我打算从文件中读取某些单词等等,但目前我无法使用当前的代码。

我有3个文件。头文件,主文件和实现文件。

ReadWords.h

#ifndef READWORDS_H
#define READWORDS_H
/**
* ReadWords class. Provides mechanisms to read a text file, and return
* capitalized words from that file.
*/
using namespace std;

#include <string>
#include <fstream>

 class ReadWords
 {
   public:
    /**
     * Constructor. Opens the file with the default name "text.txt".
     * Program exits with an error message if the file does not exist.
     */
     ReadWords();

    /**
     * Constructor. Opens the file with the given filename.
     * Program exits with an error message if the file does not exist.
     * @param filename - a C string naming the file to read.
     */
     ReadWords(char *filename);

    /**
     * Closes the file.
     */
     void close();


   // working storage.
   private:
     string nextword;
     ifstream wordfile;
     bool eoffound;

 };

 #endif

ReadWords.cpp

#include "ReadWords.h"
#include <iostream>
using namespace std;

//:: Defines function as member of class.


ReadWords::ReadWords(char *filename)
{
    ifstream str;
    str.open("hamlet.txt");
    char c;
    while ((c = str.get()) !=EOF){
        cout << c << endl;
    }
}

void close()
{

}

的main.cpp

#include "ReadWords.h"

int main()
{
    ReadWords rw;
    rw.ReadWords("hamlet.txt");
}

现在我知道我显然做错了什么,但我不是百分之百确定。 我在编译中收到的错误如下:

main.cpp: In function `int main()':
main.cpp:6: error: invalid use of `class ReadWords'

工具已完成,退出代码为1

非常感谢任何帮助。 :)

6 个答案:

答案 0 :(得分:2)

在你的main.cpp中,你错过了#include ReadWords.h指令中的引号。要解决此问题,您应该使用#include "ReadWords.h"

另外,您应该注意std::istream::get只返回一个字符。如果您想在(例如)std::string中阅读整个单词,则应使用std::istream::operator >>,如下所示:

std::ifstream in("my_file");
std::string word;

if (in.is_open()) {
    while (in >> word) {
        //do something with word
    }
}

另一个突出的问题是,在rw.ReadWords("hamlet.txt")中,你正在调用一个构造函数,就像它是一个成员函数一样。使用该重载的正确方法是:ReadWords rw("hamlet.txt")

作为旁注:构造函数的工作是初始化对象。在它的身体内做更多的事情并不是一个好习惯。

答案 1 :(得分:0)

修复编译器的第一个错误,即main.cpp的第一行

#include ReadWords.h

需要:

#include "ReadWords.h"

答案 2 :(得分:0)

应该是

#include "ReadWords.h"

#include <ReadWords.h>

答案 3 :(得分:0)

首先,您需要添加“;”在main.cpp中的rw.ReadWords(“hamlet.txt”)之后。这就是编译器输出的最后一行的含义。

答案 4 :(得分:0)

这似乎是不必要的复杂。这不会吗?

vector<string> words;
string word;
while(cin >> word)
    words.push_back(word);

答案 5 :(得分:0)

你的节目中有很多错误:

  1. 关闭您已打开的文件。永远记住这一点,它可能会导致运行时错误。
  2. 在main.cpp文件中,第一行是#include“ReadWords.h”
  3. 在代码行的末尾加上一个分号:rw.ReadWords(“hamlet.txt”);