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

Aik*_*001 5 c++

继承人我的错误......

"在构造函数'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) {

}
Run Code Online (Sandbox Code Playgroud)

Alo*_*ave 19

错误原因:

创建派生类NumGame的实例时,Category将调用Base类无参数构造函数来创建Category对象的一部分.你的类没有,编译器抱怨它.

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

一旦你为你的类的编译器不合成不带任何参数为你构造的任何构造函数,你必须提供自己,如果你的代码使用了一个.

解决方案:

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

Catoegory通过Member Initializer列表调用Base类子对象中相应的可用构造函数.这将删除代码使用无参数构造函数的方案.

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

}
Run Code Online (Sandbox Code Playgroud)

要么

你需要Category自己为班级提供一个无争议的建设者:

Category::Category()
{

}
Run Code Online (Sandbox Code Playgroud)


Man*_*rse 9

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

NumGame::NumGame(int& b) :
    Category(b)
{
    myRandNum = b;
}
Run Code Online (Sandbox Code Playgroud)