C ++实现从抽象模板派生的模板

时间:2014-02-24 03:45:22

标签: c++ templates virtual abstract derived

SortedList.h是一个抽象模板,LinkedSortedList.h派生出SortedList.h并且是一个模板,LinkedSortedList.cpp是一个实现LinkedSortedList.h中函数的模板,也是我遇到问题的地方。

新的新错误:我认为我现在的问题是我没有正确地覆盖SortedList.h中的方法。

SortedList.h中的方法:

virtual void clear() = 0;   

LinkedSortedList.h中的方法:

template <typename Elm> void SortedList<Elm>::clear() override; 

错误:

  

错误C3240:'clear':必须是'SortedList'的非重载抽象成员函数

我试过了:

void SortedList<Elm>::clear(){}

但我仍然得到同样的错误。我试图找到解决方案,但失败了。

1 个答案:

答案 0 :(得分:1)

您需要告诉编译器您正在定义模板的成员:

template <typename Elm>
LinkedSortedList<Elm>::LinkedSortedList() {

编辑:这更像是多个问题,但错误信息不同:

  

c:\ users \ deltac \ documents \ visual studio 2010 \ projects \ linked list \ linked list \ linkedsortedlist.h(23):error C2365:'linkedSortedList :: size':redefinition;以前的定义是'成员函数'

来自代码:

int size() const;
int size;           // Compiler report here?

您不能使用相同的标识符来引用成员变量和成员函数。您可以为不同的成员函数重用相同的标识符(函数可以重载)。将成员重命名为其他内容:例如int m_size;

错误2 不是错误,但是日志中的上一条错误消息的继续(以开头开头的行不表示新错误。< / p>

  

c:\ users \ deltac \ documents \ visual studio 2010 \ projects \ linked list \ linked list \ main.cpp(27):错误C2259:'LinkedSortedList':无法实例化抽象类

基础中至少有一个纯虚函数(完整错误消息可能包括它们的列表)尚未被覆盖。这使派生类型成为抽象类型,您无法实例化它。提供适当的定义。