На первый взгляд все кажется правильным, но этот код НЕ компилируется. Однако, если бы я изменил тип возвращаемого значения базового класса на double *
, тогда он будет скомпилирован. Может кто-нибудь объяснить, как/почему компилятор не видит тип шаблона «Т» в качестве действительного типа возврата.Ошибка C++: конфликтный тип возвращаемого значения, указанный для ... templated sub-class
Базовый класс:
01 template <typename T>
02 class DefaultValueFunctorBase {
03 public:
04 virtual const T operator() (void) const = 0;
05 };
Подкласс:
01 class DblPtrDft : public DefaultValueFunctorBase<double *> {
02 public:
03 DblPtrDft (double default_value_)
04 : DefaultValueFunctorBase<double *>(),
05 _default_value(default_value_),
06 _default_value_ptr(&_default_value)
07 {}
08
09 const double * operator() (void) const { return _default_value_ptr; }
10
11 private:
12 const double *_default_value_ptr;
13 const double _default_value;
14 };
ОШИБКА:
DblPtrDft.h:09: error: conflicting return type specified for ‘virtual const double* DblPtrDft::operator()() const’ DefaultValueFunctorBase.h:04: error: overriding ‘const T DefaultValueFunctorBase::operator()() const [with T = double*]’
двойных * сопз не совпадают с двойным сопзом * –
@AndyProwl Можете ли вы сделать ответ и показать, что правильный код должен выглядеть? – Zak
Сделай это, дай мне минуту. –