2016-10-27 14 views
1

初心者ですが、これは(おそらく一般的な)質問を正確に検索するためにはっきりとしていませんでした。 私は与えられたクラス(辞書)を持っているプログラムに取り組んでいます。私は辞書を実装する具体的なクラス(Word)を作ることになっています。私は辞書で何も変更しないことを言及する必要があります。C++初心者:デフォルトとカスタムコンストラクタの呼び出し

Word用のヘッダーファイルを作成した後、word.cppにすべてを定義します。 これを正しく実行しているかどうかは不明ですが、コンストラクタを特定のファイルから読み込み、その情報をWordのパブリックメンバに格納します。 (私はベクトルがプライベートでなければならないことを理解し、私はこの現在の問題の根本を取得することが公開されて)

dictionary.h

#ifndef __DICTIONARY_H__ 
#define __DICTIONARY_H__ 

#include <iostream> 
#include <string> 
#include <vector> 
#include <fstream> 

using namespace std; 

class Dictionary 
{ 
public: 

    Dictionary(istream&); 
    virtual int search(string keyword, size_t prefix_length)=0;  
}; 

#endif /* __DICTIONARY_H__ */ 

word.h

#ifndef __WORD_H__ 
#define __WORD_H__ 
#include "dictionary.h" 




class Word : public Dictionary{ 
public: 
    vector<string> dictionary_words; 
    vector<string> source_file_words; 
    Word(istream &file);  
    int search(string keyword, size_t prefix_length); 
    void permutation_search(string keyword, string& prefix, ofstream& fout, int& prefix_length); 

}; 
#endif /* __WORD_H__*/ 

word.cpp

word.cppで
#include "word.h" 

    Word(istream& file) : Dictionary(istream& file) 
    { 
     string temp; 
     while (file >> temp) 
     { 
      getline(file,temp); 
      dictionary_words.push_back(temp); 
     } 

    } 

、ライン上の「ことば::ことば(のIStream &ファイル) "、私はこのエラーを取得します: '[エラー:' Dictionary :: Dictionary() 'の呼び出しに一致する関数がありません。

私はこのエラーは「Wordのコンストラクタが辞書を呼び出す」ためであると言われていますが、私はまだその考えをよく理解していません。私はDictionaryのコンストラクタを使用しようとはしていませんが、Wordのものです。 誰かが解決策のアイデアを持っている場合は、この問題を引き起こしていることに関連して、私が調べることができることにも感謝します。

+0

ストップ説明思えます言語/識別子) – Danh

答えて

2

親オブジェクトは子の前に構築されるので、子クラスは親コンストラクタを呼び出す必要があります。だからあなたのような何かを書く必要があります。

Word::Word(isteam& file) : Dictionary(file) 
{ 
    ... 
} 

は `下さい__DICTIONARY_H__`、[識別子](http://en.cppreference.com/w/cpp/参照を使用して、より良いここWhat are the rules for calling the superclass constructor?

+0

ああ、返信いただきありがとうございます。 word.cpp :(。text + 0x22): 'Dictionary :: Dictionary(std :: istream&) 'への未定義参照 – jjxd

+0

**を定義する' word.cpp'ファイルがあります。 'Word(std :: istream&)'コンストラクタのbody **を返します。 'Dictionary(std :: istream&)'コンストラクタの** body **を定義する同様の 'dictionary.cpp'ファイルもありますか?エラーメッセージには、あなたのプロジェクトにそのようなボディを定義するファイルが含まれていないことが示唆されます。 –

+0

私は過去にそうしようとしていましたが、成功しませんでした - 私は親のコンストラクタの定義に入れなければなりませんか?ワード1が私が必要とするすべてのことをしているかのように感じますが、この課題のために辞書を保持する必要があります。 – jjxd

関連する問題