Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 错误:没有用于调用的匹配函数_C++ - Fatal编程技术网

C++ 错误:没有用于调用的匹配函数

C++ 错误:没有用于调用的匹配函数,c++,C++,这是我的错误 “在构造函数'NumGame::NumGame(int&')中: 错误:调用“Category::Category()”时没有匹配的函数 我在这里看了几个类似的问题,但似乎找不到答案。我有一个基类类别,NumGame继承自它,但不会编译 class Category { public: void virtual selection(int&); Category(int&); virtual ~Category(){}; private:

这是我的错误

“在构造函数'NumGame::NumGame(int&')中: 错误:调用“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) {

}
类别{
公众:
无效虚拟选择(int&);
类别(国际及);;
虚拟~Category(){};
私人:
int myRandNum;
};
类别::类别(int&a){
myRandNum=a;
}
无效类别::选择(int&a){

cout错误原因:

当您创建派生类
NumGame
的实例时,基类
Category
不会调用参数构造函数来创建对象的
Category
部分。您的类没有实例,编译器会对此进行投诉

为什么编译器没有合成默认构造函数?

一旦您为类提供了任何构造函数,编译器就不会合成不接受任何参数的构造函数,如果您的代码使用构造函数,您必须自己提供

解决方案:

有两种方法可以避免此错误:

通过调用基类
Catoegory
子对象中适当的可用构造函数。这将删除代码使用无参数构造函数的场景

NumGame::NumGame(int& b) : Category(b)
{

}

您需要自己为
类别
类提供无参数构造函数:

Category::Category()
{

}

Category
没有默认构造函数,因此在构造
NumGame
Category
基本对象时需要提供参数:

NumGame::NumGame(int& b) :
    Category(b)
{
    myRandNum = b;
}

在您的
NumGame
类中,您必须提供对基类构造函数的调用。如果不提供,编译器将使用默认构造函数为您执行此操作:在您的情况下,
Category()
你没有..

但我不仅仅是过度使用默认构造函数吗?如果我没有过度使用默认构造函数,那么将使用默认构造函数,这就是为什么我在默认构造函数中有参数。顺便说一句,这两个答案都导致我的代码编译,显然有些事情我不清楚:)太好了,唯一的答案是这样的帮助我解决了这个问题。:D