Я получаю ошибку компиляции, когда я называю конструктор TestComp, который разработан следующим образом:Выведение из чистого виртуального класса шаблона
template <typename R>
class IComparable
{
public:
virtual bool Equals(const R & rhs) const = 0;
};
class TestComp : IComparable<char*>
{
public:
std::string x;
TestComp(std::string & a)
{
x = a;
}
virtual bool Equals(const char* & a) const
{
return x == std::string(a);
}
};
Ошибка:
error C2259: 'TestComp2' : cannot instantiate abstract class due to following members:'bool IComparable<R>::Equals(const R &) const' : is abstract with [ R=char * ]
, который я могу Не понимаю, как я определяю TestComp :: Equals с тем, что похоже на то же, что и IComparable :: Equals.
Одна вещь, которую я заметил при попытке различных обходных решений, заключается в том, что если я сделаю обе функции «Equals» (R & rhs) const «удаляет const из параметра, то я больше не получаю эту ошибку.
Может кто-нибудь помочь мне понять это поведение?