Удаление всего нерелевантного кода давайте рассмотрим подписи как базовых, так и унаследованных классов:
class Validator {
public:
virtual void validateAttribute(Model &model, const std::string &attribute);
};
class RequiredValidator : public Validator {
public:
void validateAttribute(Model &model, std::string &attribute);
};
В базовом классе ::validateAttribute()
у вас есть для его параметров Model& model
и const std::string& attribute
, а в производном классе ::validateAttribute()
у вас есть для его параметров Model &model
и std::string& attribute
.
Конфликт здесь const std::string&
и std::string&
. Либо сделайте две функции точно совпадающими заранее, либо в вашем случае, потому что вы пытаетесь использовать полиморфизм, который вы можете в своем производном классе исправить, выполнив следующее:
/*virtual*/ void validateAttribute( Model& model, std::string& string ) override;
Ключевое слово override
здесь сгенерирует ошибку компилятора, объясняя, в чем ваша проблема. Не забудьте также добавить virtual
, если вы планируете наследовать от этого производного класса.