Ошибка при попытке наследования от класса с помощью конструктора в C

#c #inheritance #constructor

#c #наследование #конструктор

Вопрос:

У меня проблемы с моим кодом.Класс student определяет строки studName и studRegNum как защищенные элементы данных. Я создал конструктор, который имеет аргументы для инициализации элементов данных. Класс studentAthlete наследует от student и имеет личные данные участника sport, которые описывают вид спорта, в который играет студент. Оба класса имеют функцию-член identify(), которая выводит информацию об ученике.

Когда я запускаю код, я получаю сообщение об ошибке «нет соответствующей функции для вызова ‘student:: student ()’ »

Пожалуйста, помогите. Я новичок в C . Ниже приведен мой код:

 #include <iostream>
using namespace std;

class student
{
protected:
    string studName;
    string studRegNum;
public:
    //Constructor prototype
    student(string name, string regNo);
    void identify();
};
//Constructor for student class
student::student(string name, string regNo):
studName(name), studRegNum(regNo)
{

}
class studentAthlete : public student
{
private:
    string member_sport;
    string get_member_sport(string member_Sport);
public:
    void identify();
    studentAthlete(string Sport);
};
studentAthlete::studentAthlete(string Sport):
member_sport(Sport)
{
}
string studentAthlete::get_member_sport(string member_Sport)
{
    member_Sport=member_sport;
    return member_sport;
}

void studentAthlete::identify()
{
    cout<<"Student Name: "<<studName<<endl;
    cout<<"Student Registration Number: "<<studRegNum<<endl;
    cout<<"Student sport: "<<member_sport<<endl;
}


int main()
{
    string studentName, registrationNO, studentSport;//Variables that will hold student information
    cout<<"Enter Student name: "<<endl;
    cin>>studentName;
    cout<<"Enter Registration number: "<<endl;
    cin>>registrationNO;
    cout<<"Enter Student Sport: "<<endl;
    cin>>studentSport;
    student st(studentName,registrationNO);
    studentAthlete sa(studentSport);
    cout<<"Student Details: ";sa.identify();

}

 

Комментарии:

1. Почему вы не написали конструктор для studentAthlete ?

2. Создание экземпляра объекта studentAthlete класса с studentAthlete sa; помощью пытается вызвать конструктор по умолчанию его базового класса, который не существует.

3. у вас нет конструктора по умолчанию в student

4. @vik_78 Я совсем новичок в C . Как мне создать конструктор по умолчанию в student?

5. Вы не написали studentAthlete конструктор -> генерируется значение по умолчанию -> он вызывает конструктор базового класса по умолчанию -> вы внедрили свой собственный конструктор в student == там больше нет конструктора «по умолчанию, без параметров» -> ошибка

Ответ №1:

Вы определили конструктор в student , который принимает два аргумента. У него нет конструктора по умолчанию («без аргумента»), потому что вы его определили.

studentAthlete . не имеет конструктора. Поэтому, когда вы создаете a studentAthlete , он не может создать свой базовый класс. Есть два простых решения:

  • Создайте конструктор без аргументов в student
  • Создайте конструктор в studentAthelete , который вызывает конструктор, определенный вами в student

Комментарии:

1. Чтобы выполнить пункт 2, вам нужно знать о списке инициализаторов элементов.

2. @Ciscoiphone Я все еще получаю ту же ошибку даже после редактирования кода с помощью конструктора для studentAthelete

3. Не могли бы вы опубликовать свой обновленный код @KalisploitTutorials? Если вы создали свой studentAthelete, вы должны убедиться, что он вызовет конструктор в student — см. Комментарий пользователя 4581301