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

时间:2012-03-13 10:47:48

标签: 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) {

}

3 个答案:

答案 0 :(得分:17)

错误原因:

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

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

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

解决方案:

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

通过 Member Initializer list 在基类Catoegory子对象中调用相应的可用构造函数。这将删除代码使用无参数构造函数的场景。

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

}

你需要自己为Category班提供一个无论证的构造者:

Category::Category()
{

}

答案 1 :(得分:8)

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

NumGame

答案 2 :(得分:0)

在你的NumGame类中,你必须提供对基类构造函数的调用。如果你不这样做,编译器会使用默认的构造函数为你做:在你的情况Category()中你没有...