错误:没有匹配的调用函数
Posted
技术标签:
【中文标题】错误:没有匹配的调用函数【英文标题】:error: no matching function for call to 【发布时间】:2012-03-13 10:47:48 【问题描述】:这是我的错误...
"在构造函数'NumGame::NumGame(int&)'中: 错误:没有匹配函数调用'Category::Category()'"
我在这里查看了一些类似的问题,但似乎找不到答案。我有一个基类 Category 并且 NumGame 是从它继承的,但不会编译。
class Category
public:
void virtual selection(int&);
Category(int&);
virtual ~Category();
private:
int myRandNum;
;
Category::Category(int& a)
myRandNum = a;
void Category::selection(int& a)
cout << "I am NumGame version number... " << a << endl;
cout << "Now Im playing... " << myRandNum << endl;
class NumGame : public Category
public:
void selection(int&);
NumGame(int&);
~NumGame();
private:
int myRandNum;
;
NumGame::NumGame(int& b)
myRandNum = b;
void NumGame::selection(int& b)
【问题讨论】:
【参考方案1】:错误原因:
当您创建派生类NumGame
基类Category
的实例时,不会调用任何参数构造函数来创建对象的Category
部分。你的类没有,编译器抱怨它。
为什么编译器没有合成默认构造函数?
一旦你为你的类提供了任何构造函数,编译器不会为你合成不带任何参数的构造函数,如果你的代码使用,你必须自己提供。
解决方案:
有两种方法可以避免错误:
通过Member Initializer list在基类Catoegory
子对象中调用适当的可用构造函数。这消除了您的代码使用无参数构造函数的情况。
NumGame::NumGame(int& b) : Category(b)
或
您需要自己为Category
类提供无参数构造函数:
Category::Category()
【讨论】:
太棒了,唯一能帮助我解决这个问题的答案。 :D【参考方案2】:Category
没有默认构造函数,所以在构造NumGame
的Category
基对象时需要提供参数:
NumGame::NumGame(int& b) :
Category(b)
myRandNum = b;
【讨论】:
但是我不是只是过度使用默认构造函数吗?如果我不覆盖它,那么将使用默认构造函数,这就是为什么我在默认构造函数中有参数。顺便说一句,两个答案都导致我的代码编译,显然有些事情我不清楚:)【参考方案3】:在您的NumGame
类中,您必须提供对基类构造函数的调用。如果您不这样做,编译器会使用默认构造函数为您执行此操作:在您的情况下 Category()
您没有..
【讨论】:
以上是关于错误:没有匹配的调用函数的主要内容,如果未能解决你的问题,请参考以下文章