#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