Ошибка сегментации во время выполнения консольного кода в C ++ - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь создать простую консольную систему отображения сведений об ученике, в которой есть 2 класса: ученик класса (базовый класс) с переменными-членами для имени и регистрационного номера и класс studentAthlete (производный класс) со строкой спортивного типа. Код компилируется успешно, но во время выполнения запрашивает только сведения об ученике, но не отображает детали, как ожидалось бы, когда я вызываю функцию identifier (). В блоках кода ошибка может не отображаться, но при онлайн-компиляции, такой как https://www.onlinegdb.com/online_c++_compiler, это показывает, что в коде имеется ошибка сегментации. Пожалуйста, помогите в случае необходимости.

Мой код точно (в целом), как показано ниже:

#include <iostream>
using namespace std;

/**Base class**/
class student
{
protected:
    string studName, studRegNum;
public:
    student(string stdName, string regNo);
    /**To define friendly class that is
    Common to both classes**/
    friend void identify();
};
/**constructor for class student**/
student::student(string stdName, string regNo)
{
    studName = stdName;
    studRegNum = regNo;
}
/**Derived class**/
class studentAthlete : public student
{
private:
    string member_sport;
public:
    /**To create constructor for class studentAthlete within class**/
    studentAthlete(string student_sport):student(studName, studRegNum)
    {
        member_sport = student_sport;
    }
    /**To define friendly class that is
    Common to both classes**/
    friend void identify();
};

/**To display student information**/
void identify()
{

    studentAthlete sa(sa.member_sport);
    cout<<"Student Name: "<<sa.studName<<endl;
    cout<<"Student Registration Number: "<<sa.studRegNum<<endl;
    cout<<"Student Sport: "<<sa.member_sport<<endl;

}

int main()
{
    string StudentName, StudentRegistrationNo, StudentSport;
    /**To get & set student name from user**/
    cout<<"Enter student name: "<<endl;
    cin>>StudentName;

    /**To get & set Student Registration No from user**/
    cout<<"Enter Student Registration No: "<<endl;
    cin>>StudentRegistrationNo;

    /**To get & set Student Sport from user**/
    cout<<"Enter Student Sport: "<<endl;
    cin>>StudentSport;

    /**To pass student values to their respective constructors**/
    student st(StudentName,StudentRegistrationNo);
    studentAthlete sa(StudentSport);

    /**To display student information**/
    identify();
    return 0;
}

1 Ответ

0 голосов
/ 15 апреля 2019

Вы передаете неинициализированные элементы конструктору Student.
Это приведет к неопределенному поведению.

Вам необходимо добавить параметры имени и номера в конструктор спортсменов и передать их в Student.

...