Чем больше я исследую эту проблему, тем больше я запутываюсь. Это домашнее задание, которое включает в себя расширение кода, данного нам нашим профессором. Я знаю, что проблема связана с ключевым словом const, а также с некоторыми очень запутанными новыми приложениями.
Существует универсальный класс Object, от которого наследуются несколько подклассов (Sphere, Cone, Polygon). Вот классы в Object:
public: // computational members
// return t for closest intersection with ray
virtual float intersect(const Ray &ray) const = 0;
// return color for intersection at t along ray r
virtual const Vec3 appearance(const World &w,
const Ray &r, float t) const = 0;
//The following function is added by me
virtual const Vec3 normal(Vec3 p);
};
Я добавил финальную функцию, нормально.
Так, например, в классе Sphere это реализовано так:
const Vec3 Sphere::normal(Vec3 p)
{
return (p - d_center).normalize();
}
Когда я `делаю ', я получаю следующую ошибку:
Appearance.cpp: In member function ‘const Vec3 Appearance::eval(const World&, const Vec3&, const Vec3&, Vec3, int) const’:
Appearance.cpp:46: error: passing ‘const Object’ as ‘this’ argument of ‘virtual const Vec3 Object::normal(Vec3)’ discards qualifiers
make: *** [Appearance.o] Error 1
Можете ли вы помочь мне понять, почему это происходит? Спасибо за вашу помощь.