以下代码
#include <iostream>
template<typename T>
class Abstract
{
public:
virtual ~Abstract()
{}
virtual void func(const T ¶m) const = 0;
};
class Concrete : public Abstract<int*>
{
public:
virtual void func(const int *¶m) const override // watch out!
{}
};
int main()
{
Concrete c;
}
在标记为注释的行上生成以下编译错误:
错误C3668:'Concrete :: func':具有覆盖说明符'override'的方法未覆盖任何基类方法
如果我删除了override
,则会显示以下错误:
错误C2259:'具体':无法实例化抽象类
如何从Abstract<int*>
派生?
答案 0 :(得分:4)
像这样声明Concrete
:
class Concrete : public Abstract<int*>
{
public:
virtual void func(int * const ¶m) const override
{}
};
问题是:Abstract<int*>::f()
参数的哪一部分是const
?
答案:由于T
为const
且T
中的Abstract<int*>
是指针(指向int
),因此它是指针{ {1}} - 不是const
。
答案 1 :(得分:1)
你想要这个:
virtual void func(int * const ¶m) const override // watch out!