我正在尝试编写一个程序来读取文本文件中的单词。最后我打算从文件中读取某些单词等等,但目前我无法使用当前的代码。
我有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
非常感谢任何帮助。 :)
答案 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)
你的节目中有很多错误: