2010-11-16 50 views
0

我想动态分配一个基(学生)类的数组,然后指派派生(数学)类的指针到每个数组插槽。我可以通过创建一个指向基类的指针,然后将其分配给派生类,但是当我尝试将指针指定给动态分配的基类数组时,它会失败。我已经发布了我在下面使用的代码片段。所以基本上我的问题是,为什么不动态分配的工作?动态分配类,与继承问题

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 

回答

1
studentList[0]

不是指针(即Student *),它是一个对象(即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++中,有更好,更安全的方式来做到这一点,包括容器类和智能指针。然而,这超出了问题的范围。)

+0

好吧,我没有在C看到这++我从某处学习的书,所以我必须审查。 – dubyaa 2010-11-17 00:03:44

+0

'new Student * [numStudents];'为什么有指针?这是我不明白的唯一部分。 – dubyaa 2010-11-17 00:04:58

+0

@dubyaa:因为你需要创建一个项目数组,每个项目都是'Student *'。 – 2010-11-17 00:08:57