-1
我在试图建立一个射线追踪器。我有一个名为Shape的类,我将它扩展到Sphere类(以及其他形状,如三角形)。形状有方法我重写此方法的方式有什么问题?
virtual bool intersect(Ray) =0;
所以我通过
class Sphere : public Shape{
public:
Sphere(){};
bool intersect(Ray){/*code*/};
};
创建球体类我有我用它来创建形状指针列表的主类。我创建一个球体指针并执行以下操作:
Sphere* sph = &Sphere();
shapes.emplace_front(sph); //shapes is a list of Shape pointers
然后,当我想跟踪在另一大类射线我做了以下内容:
for (std::list<Shape*>::iterator iter=shapes.begin(); iter != shapes.end(); ++iter) {
Shape* s = *iter;
bool hit = (*s).intersect(ray);
}
,但我得到的是我不能叫相交错误在虚拟类Shape上,尽管它应该是* s指向一个Sphere类型对象。我在做什么错误的继承?
谢谢,我认为那样做了。 – 2013-02-27 22:00:19