我有一个Ellipsoid结构,它是Object结构的衍生物。基本上,我想在Scene结构中创建一个Object [3] [13]指针数组,在其中我可以指向不同的Object派生类。
struct Ellipsoid : public Object {
//...
}
在主要功能中:
Ellipsoid ellipsoids[13];
addEllipsoids(3, ellipsoids); // this fills the array with valid ellipsoids, everything seems to be fine up until this point
// printing the contents here, everything is good
scene.addObjects(ellipsoids);
打印"椭圆体"数组在这里,一切都很好。
场景结构中的:
struct Scene{
int arr_num;
Object* objects[3];
void addObjects(Object* o){
// printning the o[0], o[1], ... contents here, getting garbage..
objects[arr_num++] = o;
}
当我在这里打印出* o内容(从0..12开始)甚至在我将它们添加到对象数组之前,我得到了令人讨厌的内存垃圾结果。
这是用于家庭作业,我不能使用std :: vector等东西,只是非常基本的东西。我真的不知道这里有什么问题。
答案 0 :(得分:1)
问题是您将派生类数组传递给基类指针。这不是继承。参阅:
http://www.parashift.com/c++-faq/array-derived-vs-base.html
需要查看完整的代码,但这可以解决问题:
Object ellipsoids[13];
答案 1 :(得分:0)
而不是void addObjects(Object * o); use void addObjects(Object o [],int noOfArrayElements)noOfArrayElements是必需的,因为您需要可以在addObject中处理的数组元素的数量。
您的场景结构只能存储3个对象。所以你应该确保从外面你只得到3个对象,而不是更多。在你的评论中你传递了13个对象?或者如果你想使它成为通用尝试使用malloc。
你的场景对象没有使arr_num初始化为0。希望你在某个地方做到这一点?