【问题标题】:Passing an object of a class to another class将一个类的对象传递给另一个类
【发布时间】:2017-03-04 17:08:05
【问题描述】:

我有一个类Dictionary,它在字典中有一个字符串向量。 我从用户那里获取Word 并检查该词是否在Dictionary 中。

由于实现的限制,我需要将Dictionary 类的对象(变量Lexicon)传递给Word 类(在Word 类中,我需要使用@ 中定义的搜索功能987654331@班级)。

所以我在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

【问题讨论】:

  • 你的代码does not work?
  • 请发布minimal reproducible example 以重现您的错误。
  • 尊敬的用户。人类语言也有一些语法规则。每个语句都需要以. 结尾(与c++ 中的; 原理相同)。没有您的.,您的问题很难理解。我相应地进行了编辑。还要记住,“不起作用”是没有用的。 “不编译”使事情变得更加清晰;-)。
  • 一个类不做任何事情,并且不可调用。所以“传递给一个班级”并没有立即意义。
  • 可能感兴趣:en.cppreference.com/w/cpp/language/class#Forward_declaration。您将需要word.h中的其中一个@

标签: c++ class object pass-by-reference


【解决方案1】:

您为我们提供了一些 cpp 代码的摘录。

但是,您的错误在其他地方。编译器声称在文件 word.h 的第 45 行(因此在标题中)存在语法错误。更准确地说,编译器声称他不知道那里的Dictionary。

此错误可能与您包含标题或定义类的顺序有关。如果在定义Word之前不能定义Dictionary(需要函数签名中的Dictionary),则需要在Word类之前进行前向声明:

class Dictionary;    // to be defined afterwards

这使您有机会在Word 类中使用Dictionary 成员变量或成员函数签名中的引用和指针,甚至在实际定义该类之前。但是,当然,在实现任何使用它的 Word 成员之前,您需要 Dictionary 类的真正定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    相关资源
    最近更新 更多