"Discards qualifiers" error with virtual function and/or const in c++

Чем больше я изучаю эту проблему, тем больше запутываюсь. Это домашнее задание, в котором нужно дополнить код, данный нам нашим профессором. Я знаю, что проблема связана с ключевым словом 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);
};

Я добавил последнюю функцию, normal.

Таким образом, например, в классе Sphere это реализовано так:

const Vec3 Sphere::normal(Vec3 p)
{
  return (p - d_center).normalize();
}

Когда я `make`, я получаю следующую ошибку:

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

Не могли бы вы помочь мне понять, почему это происходит? Спасибо за помощь.

0
задан Frank Harris 4 December 2011 в 16:36
поделиться