【发布时间】:2014-06-30 21:52:17
【问题描述】:
我有以下 C++ 代码:
template<typename T> class AbsClass{
public:
virtual void func(const T elem) = 0;
};
class SolidClass : public AbsClass<char*>{
public:
void func(const char* elem) {cout << elem << endl;}
};
int main(){
SolidClass so;
so.func("xyz");
}
但是,当我尝试在 main() 中实例化 SolidClass 的实例时,编译器 (g++ 4.8.1) 一直抱怨纯虚函数 AbsClass::func(const T elem) 尚未实现的错误。如果我将 SolidClass 的定义更改为以下内容,它将起作用:
class SolidClass : public AbsClass<const char*>{
.......
}
我只是感到困惑,因为我在声明 AbsClass::func(const T elem) 时已经有了 const 关键字。有人能帮忙解释一下吗?
【问题讨论】:
-
注意:如果您的编译器支持 C++11,那么您可以编写
void func(const char *elem) override {...override标记表示此函数旨在覆盖基类中的虚函数,并且如果没有,编译器将标记一个错误(因为在这种情况下它没有:它实际上是一个重载,尽管您打算覆盖)。
标签: c++ templates constants virtual-functions