我创建了两个班级,班级和学生。在 Class 构造函数中,我需要动态初始化一个指向 Student 对象的指针数组(pStudents)(我不能使用向量),初始化为 null。当我使用函数 addStudent 将学生添加到班级时,我希望能够在指针数组中搜索第一个空地址,然后将学生分配到数组中的那个位置。如果学生已经在课堂上,我还希望能够搜索数组以查看该学生是否已经在那里。
当我尝试编译程序时,出现分段错误。我知道这与我在创建 pStudents 数组时使用堆内存的方式有关,但我不确定如何解决这个问题。
这是我在 Class 头文件中声明数组的方式:
Student **ptrStudents;
这是 Class 对象的构造函数。现在,我使用任意大小的 40 作为数组。
Class::Class()
{
Student **ptrStudents = new Student*[40];
}
这是函数 addStudents,它接受一个指向学生对象的指针作为其参数。请注意,字符串名称是所有学生的数据字段。
Class::addStudents(Student *student)
{
string name = student -> getName();
string nameTemp;
for (int i = 0; i < 40; i++)
{
if (ptrStudents[i] != 0)
{
nameTemp = ptrStudents[i] -> getName();
if (name == nameTemp)
{
cout << "This student is already in the class." << endl;
return;
}
}
else if (ptrStudents[i] == 0)
{
ptrStudents[i] = student;
return;
}
这是我正在使用的主要功能:
int main ()
{
Class Economics;
Student student1("Hannah");
Economics.addStudent(&student1);
return 0;
}