2016-10-22 5 views
-3

나는 사전에 문자열의 벡터가있는 클래스 Dictionary을 가지고있다. 사용자로부터 Word을 가져 와서 해당 단어가 Dictionary인지 확인합니다. 때문에 구현의 제약클래스의 객체를 다른 클래스에 전달

, I (나는 Dictionary 클래스에 정의 된 검색 기능을 사용하는 것이 필요 Word 클래스) Word 클래스에 클래스 Dictionary (Lexicon 변수)의 객체를 전달해야한다.

그래서 나는 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 코드의 일부 추출물을 제공하고 있습니다.

그러나 오류는 다른 곳에서 발생합니다. 컴파일러는 word.h 파일의 45 행 (헤더에 있음)에 구문 오류가 있다고 주장합니다. 더 정확히 말하면, 컴파일러는 그가 Dictionary을 모른다는 것을 주장합니다.

이 오류는 아마도 헤더를 포함 시키거나 클래스를 정의하는 순서와 관련이 있습니다. 당신은 (함수의 서명에 사전을 필요로) Word을 정의하기 전에 Dictionary을 정의 할 수없는 경우, 당신은 단지 Word 클래스 전에 앞으로 선언을해야합니다

class Dictionary; // to be defined afterwards 

이 당신에게 기회의 잎 Word 클래스는 해당 클래스가 실제로 정의되기 전에도 멤버 변수 또는 멤버 함수의 서명에 Dictionary 참조 및 포인터를 사용합니다. 물론 Dictionary 클래스를 사용하는 Word 멤버를 구현하기 전에 Dictionary 클래스의 실제 정의가 필요합니다.