乍一看,一切看起來都是正確的,但此代碼不會編譯。但是,如果我要將基類的返回類型更改爲double *
,那麼它將編譯。有人可以解釋爲什麼編譯器沒有看到模板類型「T」作爲有效的返回類型。C++錯誤:指定用於...模板化子類的衝突返回類型
基類:
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*]’
雙* const的是不一樣的雙常量* – 2013-02-19 01:29:12
@AndyProwl你可以請一個答案,並演示了正確的代碼應該是什麼樣子? – Zak 2013-02-19 01:53:16
會這麼做,給我一點時間。 – 2013-02-19 01:59:16