2016-10-22 4 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

Ваш код [не работает] (http://importblogkit.com/2015/07/does-not-work/)? –

+3

Опубликуйте [MCVE], который воспроизводит вашу ошибку, пожалуйста. –

+0

Уважаемый пользователь. Человеческий язык также имеет некоторые синтаксические правила. Каждое утверждение должно заканчиваться на '.' (тот же принцип, что и'; 'в C++). Без вашего «.» Ваш вопрос было очень трудно понять. Я отредактировал соответственно. Также имейте в виду, что «не работает» бесполезно. «Не компилирует» делает вещи намного яснее ;-). – Christophe

ответ

0

Вы предоставили нам некоторые выдержки из кода CPP.

Ваша ошибка в другом месте. Компилятор утверждает, что в строке 45 файла word.h (так что в заголовке) есть синтаксическая ошибка. Точнее, компилятор утверждает, что он не знает Dictionary.

Эта ошибка, вероятно, связана с порядком, в котором вы включаете заголовки или определяете классы. Если вы не можете определить Dictionary, прежде чем определить Word (который нуждается в словарь в сигнатуре функции), вам необходимо сделать вперед DECLARE непосредственно перед Word класса:

class Dictionary; // to be defined afterwards 

Это оставляет возможность в класс Word для использования Dictionary ссылок и указателей в переменных-членах или в подписях функций-членов, даже до того, как этот класс фактически определен. Но, конечно, вам понадобится реальное определение класса Dictionary, прежде чем внедрять любого из членов Word, которые его используют.

Смежные вопросы