2016-10-22 166 views
-3

我有一個類Dictionary它有一個字典中的字符串矢量。 我正在採取Word從用戶,並檢查單詞是否在Dictionary將一個類的對象傳遞給另一個類

由於實施的限制,我需要Dictionary類(可變Lexicon)的對象傳遞給Word類(在一個Word類我需要使用其在Dictionary類中定義的搜索功能)。

所以我在Word班,並打電話給MyWords.search();。但我的代碼不能編譯!爲什麼?

int main() 
{ 
Dictionary Lexicon(dictionary_file) 
dictionary_file.close(); 
cout<<"Please enter a word to be searched in the dictionary:"<<endl; 
cin>>word_to_search; 


Word Keyword; 
Keyword.setter(word_to_search); 
Keyword.gettingDictionary(Lexicon); 
return 0; 
} 

void Word::gettingDictionary(const Dictionary& myWords) 
{ 
    myWords.search(keyword);// function defined in Dictionary class 
          //keyword is a member of Word class 
} 

這裏在編譯的時候我收到錯誤:

++ -c main.cpp 
In file included from dictionary.h:22:0, 
       from main.cpp:19: 
word.h:45:31: error: ‘Dictionary’ does not name a type 
    void gettingDictionary(const Dictionary& myWords); 
          ^~~~~~~~~~ 
main.cpp: In function ‘int main(int, char**)’: 
main.cpp:82:41: error: no matching function for call to  ‘Word::gettingDictionary(Dictionary&)’ 
     Keyword.gettingDictionary(Lexicon); 
            ^
In file included from dictionary.h:22:0, 
       from main.cpp:19: 
word.h:45:7: note: candidate: void Word::gettingDictionary(const int&) 
void gettingDictionary(const Dictionary& myWords); 
    ^~~~~~~~~~~~~~~~~ 
word.h:45:7: note: no known conversion for argument 1 from  ‘Dictionary’ to ‘const int&’ 
make: *** [Makefile:7: main.o] Error 1 
+2

您的代碼[does not work](http://importblogkit.com/2015/07/does-not-work/)? –

+3

發佈一個[MCVE],重現您的錯誤,請。 –

+0

尊敬的用戶。人類語言也有一些語法規則。每個語句都需要以'。'(與C++中的';'原理相同)來結束。沒有你的'。'你的問題很難理解。我相應編輯。另外請記住,「不起作用」是無用的。 「不編譯」使事情變得更清晰;-)。 – Christophe

回答

0

您爲我們提供了一個cpp的代碼的某些提取物。

然而,你的錯誤是在別的地方。編譯器聲稱在文件word.h(在標題中是這樣)的行45中存在語法錯誤。更確切地說,編譯器聲稱他不知道那裏有Dictionary

此錯誤可能與包含標題或定義類的順序有關。如果你不能確定你Dictionary定義Word(這需要字典的功能的簽名)之前,你只需要在Word課前做好向前聲明:

class Dictionary; // to be defined afterwards 

這使你在機會Word類在成員變量或成員函數的簽名中使用Dictionary引用和指針,甚至在實際定義該類之前。但是,當然,在實現任何使用它的Word成員之前,您需要真正定義Dictionary類。