我正在尝试构建一个光线追踪器。我有一个名为 Shape 的类,我将其扩展到 Sphere 类(以及其他形状,如三角形)。形有法
virtual bool intersect(Ray) =0;
所以我创建了 Sphere 类
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 上调用 intersect 的错误,即使它应该是 *s 指向一个 Sphere 类型的对象。我在继承方面做错了什么?