-1

私は現在、テキストファイルから単語を読み取るプログラムを作成しようとしています。最後に、ファイルなどから特定の単語を読み取る予定ですが、現時点では現在のコードを機能させることができません。

私は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");
}

今、私は明らかに何か間違ったことをしていることを知っていますが、100%何が起こっているのかわかりません。コンパイル時に受け取るエラーは次のとおりです。

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

終了コード1で完了したツール

どんな助けでも大歓迎です。:)

4

6 に答える 6

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
    }
}

もう1つ目立つのはrw.ReadWords("hamlet.txt")、コンストラクターをメンバー関数であるかのように呼び出していることです。そのオーバーロードを使用する適切な方法は次のとおりReadWords rw("hamlet.txt")です。

補足として:コンストラクターの仕事はオブジェクトを初期化することです。体内でそれ以上のことをするのは良い習慣ではありません。

于 2012-11-11T17:34:15.043 に答える
0

コンパイラからの最初のエラーを修正するには、main.cppの最初の行

#include ReadWords.h

する必要があります:

#include "ReadWords.h"
于 2012-11-11T17:32:55.657 に答える
0

そのはず

#include "ReadWords.h"

また

#include <ReadWords.h>
于 2012-11-11T17:33:03.873 に答える
0

まず、「;」を追加する必要があります main.cppのrw.ReadWords( "hamlet.txt")の後。これが、コンパイラ出力の最後の行の意味です。

于 2012-11-11T17:33:16.570 に答える
0

これは不必要に複雑に思えます。これはしませんか?

vector<string> words;
string word;
while(cin >> word)
    words.push_back(word);
于 2012-11-11T17:33:58.070 に答える
0

プログラミングには多くの間違いがあります。

  1. 開いたファイルを閉じます。これを常に覚えておいてください。実行時エラーが発生する可能性があります。
  2. main.cppファイルでは、最初の行の#include"ReadWords.h"です。
  3. コード行の最後にセミコロンを置きます。rw.ReadWords( "hamlet.txt");
于 2012-11-11T17:39:55.403 に答える