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

C++ implementing a template that derives from an abstract template

本文关键字:抽象 一个 派生 实现 C++      更新时间:2023-10-16

SortedList.h是一个抽象模板,LinkedSortedList.sh派生了SortedList.h.并且是一个模板,而LinkedSortdList.cpp是一个实现LinkedSortDList.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(){}

但我还是犯了同样的错误。我试图找到解决办法,但失败了。

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

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

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

c:\users\deltac\documents\visual studio 2010\projects\linked list\linked sortedlist.h(23):错误C2365:"linkedsortedlist::size":重新定义;以前的定义是"成员函数">

来自代码:

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

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

错误2不是错误,但日志中上一条错误消息的延续(以开头的行请参阅)并不表示新错误。

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

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