Я пытаюсь построить трассировщик лучей. У меня есть класс под названием Shape, который я распространяю на класс Sphere (и другие фигуры, а также треугольники). Форма имеет методЧто случилось с тем, как я переопределяю этот метод?
virtual bool intersect(Ray) =0;
И поэтому я создаю класс Sphere по
class Sphere : public Shape{
public:
Sphere(){};
bool intersect(Ray){/*code*/};
};
У меня есть основной класс, который я использую для создания списка Shape указателей. Я создаю указатель Sphere и сделайте следующее:
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. Что я делаю неправильно с наследованием?
Спасибо, я думаю, что сделал это. –