我继续为我的一个函数收到编译器错误。
LinkedList.hpp:81: error: `template<class T> class LinkedList' used without template parameters
LinkedList.hpp:81: error: expected constructor, destructor, or type conversion before '*' token
LinkedList.hpp:81: error: expected `;' before '*' token
但问题是我有构造函数,析构函数和类型转换。我很确定实施是错误的
// This is the function i keep on getting an error for
template <class T>
ListNode* LinkedList<T>::find(int pos)//Finds the position of an item
{
if(pos < 1)
return NULL; //If pos is less than one then find returns NULL because pos is a illegal value.
else
{
ListNode *temp = head;
for(int i = 1; i < pos; i++)
temp = temp -> next;
return temp;
}
}
//The class
template <class T>
class LinkedList : public ABCList<T> {
private:
//T a [LIST_MAX];
struct ListNode
{
T data; // List item
ListNode *next; //Pointer to next node
};
int size;
ListNode *head;
ListNode *find(int pos);
public:
LinkedList();
LinkedList(LinkedList &other);
~LinkedList();
virtual bool isEmpty () = 0;
virtual int getLength () = 0;
virtual void insert (int pos, T item) = 0;
virtual T remove (int pos) = 0;
virtual T retrieve (int pos) = 0;
};
答案 0 :(得分:2)
std::list
是双重链接列表。ListNode*
定义typename LinkedList<T>::ListNode*
重写为find()
吗?
ListNode
,(在这种情况下,您应该将其声明为公共),或者它是否是实现的一部分(在这种情况下,您可能想要创建某种迭代器。)我仍然遇到同样的错误
find()
的定义是否位于LinkedList
类声明的顶部,如问题中所示?如果是这种情况,你应该交换它们。
答案 1 :(得分:1)
我看到的一件事是ListNode是在LinkedList中定义的,因此必须以这种方式进行限定:
template <class T>
typename LinkedList<T>::ListNode* LinkedList<T>::find(int pos) {
...
}