0

基本 (Student) クラスの配列を動的に割り当て、派生 (Math) クラスへのポインターを各配列スロットに割り当てようとしています。基本クラスへの単一のポインターを作成し、それを派生クラスに割り当てることで機能させることができますが、動的に割り当てられた基本クラスの配列へのポインターに割り当てようとすると失敗します。以下に使用しているコードの断片を投稿しました。基本的に私の質問は、動的に割り当てられたものが機能しないのはなぜですか?

   Student* studentList = new Student[numStudents];  
   Math* temp = new Math(name, l, c, q, t1, t2, f);  
   studentList[0] = temp;                                 

/*Fragment Above Gives Error:

main.cpp: In function âint main()â:
main.cpp:55: error: no match for âoperator=â in â* studentList = tempâ
grades.h:13: note: candidates are: Student& Student::operator=(const Student&)*/



   Student * testptr;
   Math * temp = new Math(name, l, c, q, t1, t2, f);
   testptr = temp
   //Works
4

1 に答える 1

1

studentList[0]はポインター (つまり a Student *) ではなく、オブジェクト (つまり a Student) です。

必要なのはポインターの配列のように思えます。その場合、次のようにする必要があります。

Student **studentList = new Student *[numStudents];
Math *temp = new Math(name, l, c, q, t1, t2, f);
studentList[0] = temp;

このスニペットでは、のタイプはstudentListですStudent **。したがって、 の型はstudentList[0]ですStudent *

(C++ では、コンテナー クラスとスマート ポインターを使用して、これを行うためのより適切で安全な方法があることに注意してください。ただし、それは質問の範囲を超えています。)

于 2010-11-16T23:52:29.843 に答える