我正在尝试使用struct作为我的私有成员来实现一个LinkList类,但是,当我尝试在LinkList.ccp下定义struct ListNode时,编译器说没有定义指针。错误发生在高亮的线上
#ifndef LINKLIST_H
#define LINKLIST_H
#include <iostream>
using namespace std;
template <typename T>
class LinkList{
private:
struct ListNode{
T item;
ListNode * next;
};
int size; // the size of the listNodes.
ListNode* _head;
public:
LinkList(); // constructor
void giveup(int n);
bool isEmpty();
int getLength();
ListNode * find(int index);
};
#endif
#include "LinkList.h"
template <typename T>
LinkList<T>::LinkList(){
_head = NULL;
size = 0;
}
template <typename T>
void LinkList<T>::giveup(int n){
cout << "The error " << n << " has occured" << endl;
}
template <typename T>
bool LinkList<T>::isEmpty(){
return (size == 0);
}
template <typename T>
int LinkList<T>::getLength(){
return size;
}
template <typename T>
***ListNode * LinkList<T>::find(int index){ // pointer not defined***
if(index < 1 || index > size){
return NULL;
}
ListNode * currentNode = _head;
for(int pos =2; pos <=index; pos++){
currentNode = currentNode->next;
}
return currentNode;
}
答案 0 :(得分:0)
在类外部的成员函数定义中,前导返回类型不在类中,因此如果它是嵌套类型,则必须限定它:
template <typename T>
LinkList<T>::ListNode * LinkList<T>::find(int index)
^^^^^^^^^^^^^
参数列表和任何尾随返回类型都在类中,因此(在C ++ 11或更高版本中)您可以将其写为
template <typename T>
auto LinkList<T>::find(int index) -> ListNode *
一旦你修复了它,为了使用模板,你需要将函数定义移动到头文件中,如here所述。