Class と Students の 2 つのクラスを作成しました。Class コンストラクターでは、NULL に初期化された Student オブジェクトへのポインター (pStudents) の配列を動的に初期化する必要があります (ベクターは使用できません)。関数 addStudent を使用して学生をクラスに追加するとき、ポインターの配列で最初の null アドレスを検索し、その学生を配列内のその場所に割り当てられるようにしたいと考えています。学生がすでにクラスに参加している場合は、配列を検索して、この学生がすでにクラスにいるかどうかを確認できるようにしたいと考えています。
プログラムをコンパイルしようとすると、セグメンテーション違反が発生します。pStudents 配列を作成するときにヒープ メモリを使用する方法に関係していることはわかっていますが、これを解決する方法がわかりません。
クラスヘッダーファイルで配列を宣言した方法は次のとおりです。
Student **ptrStudents;
これは Class オブジェクトのコンストラクタです。今のところ、配列には任意のサイズ 40 を使用しています。
Class::Class()
{
Student **ptrStudents = new Student*[40];
}
これは、生徒オブジェクトへのポインターを引数として取る関数 addStudents です。string name はすべての学生のデータ フィールドであることに注意してください。
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;
}