2010-11-16 30 views
0

J'essaie d'allouer dynamiquement un tableau de classes de base (Student), puis d'affecter des pointeurs aux classes dérivées (Math) à chaque emplacement de tableau. Je peux le faire fonctionner en créant un seul pointeur vers la classe de base, puis en l'affectant à une classe dérivée, mais lorsque j'essaie d'assigner au pointeur un tableau dynamiquement alloué de classes de base, il échoue. J'ai posté les fragments de code que j'utilise ci-dessous. Donc, fondamentalement, ma question est la suivante: pourquoi l'allocation dynamique ne fonctionne-t-elle pas?Allocation dynamique de classes, avec Inheritance issue

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 

Répondre

1

studentList[0] est pas un pointeur (à savoir un Student *), il est un objet (à savoir un Student).

Cela ressemble un peu à ce dont vous avez besoin est un tableau de pointeurs. Dans ce cas, vous devez faire quelque chose comme:

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

Dans cet extrait, le type de studentList est Student **. Par conséquent, le type de studentList[0] est Student *.

(Notez que dans C++, il existe de meilleures, plus sûres façons de faire, impliquant des classes de conteneurs et des pointeurs intelligents. Cependant, c'est au-delà de la portée de la question.)

+0

D'accord, je ne vois cela dans le C++ livre que j'apprends de quelque part, donc je vais devoir examiner cela. – dubyaa

+0

'new Student * [numStudents];' Pourquoi y a-t-il un pointeur? Est-ce la seule partie de ce que je ne comprends pas. – dubyaa

+0

@dubyaa: Parce que vous devez créer un tableau d'éléments, dont chacun est un 'étudiant *'. –