ошибка: нет подходящей функции для вызова - PullRequest
5 голосов
/ 13 марта 2012

Вот моя ошибка ...

"В конструкторе '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) {

}

Ответы [ 3 ]

18 голосов
/ 13 марта 2012

Причина ошибки:

При создании экземпляра производного класса NumGame Базовый класс Category не вызывается конструктор аргумента для создания части Categoryпредмет.У вашего класса его нет, и компилятор жалуется на это.

Почему компилятор не синтезировал конструктор по умолчанию?

Когда вы предоставляете какой-либо конструктор для вашего класса, компилятор не синтезирует конструктор, который не принимает аргумент дляВы, Вы должны предоставить это самостоятельно, если ваш код использует один.

Решения:

Существует два способа избежать ошибки:

Вызвать соответствующий доступный конструктор в базовом классе Catoegory подобъект через Список инициализаторов элементов .Это удаляет сценарий, в котором ваш код использует конструктор без аргументов.

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

}

ИЛИ

Вам необходимо предоставить constrcutor без аргументов для Category класса самостоятельно:

Category::Category()
{

}
8 голосов
/ 13 марта 2012

Category не имеет конструктора по умолчанию, поэтому вам необходимо указывать аргументы при создании базового объекта Category из NumGame:

NumGame::NumGame(int& b) :
    Category(b)
{
    myRandNum = b;
}
0 голосов
/ 13 марта 2012

в вашем NumGame классе вы должны предоставить вызов конструктору базового класса.если вы этого не сделаете, компилятор сделает это за вас с помощью стандартного конструктора: в вашем случае Category(), которого у вас нет ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...