我正在尝试通过自己的通用/模板ArrayList实现,我遇到了麻烦。我知道错误来自于没有在参数列表中的某个地方,但对我来说,我无法弄清楚,如果我这样做,我会得到一个不同的错误。为简洁起见,我删除了我无法调试的函数,直到首先调试这个函数。
// // ArrayList.h
#include <iostream>
#include <string>
using namespace std;
template <class T>
class ArrayList {
private:
class Node {
private:
Node* next;
Node* prev;
T* element;
public:
Node();
Node( T* );
Node( Node* /*new prev*/, T* );
~Node();
void setNext( Node* );
Node* getNext();
};
int size;
int maxSize;
int current_index;
Node* myArrayList;
Node* curr;
Node* head;
Node* tail;
public:
};
“Node * getNext();”的实现在我的cpp文件中。
// // ArrayList.cpp
#include "arraylist.h"
...
template <class T>
ArrayList::Node* ArrayList::Node::getNext() {
return this->next;
}
试图插入后面::效果不好......如果我把它放在它之前,节点*就会变得不确定。
template <class T>
ArrayList<T>::Node* ArrayList::Node::getNext() {
return this->next;
}
然后我得到“;”预期在“*”之前。
答案 0 :(得分:2)
试试这个:
template <class T>
typename ArrayList<T>::Node* ArrayList<T>::Node::getNext()
{
return this->next;
}
或者在C ++ 11中(Demo):
template <class T>
auto ArrayList<T>::Node::getNext() -> Node*
{
return this->next;
}
或仅使用内联定义,建议用于简单访问器。
答案 1 :(得分:1)
您需要定义您的成员函数:
template <class T>
typename ArrayList<T>::Node* ArrayList<T>::Node::getNext() {
return this->next;
}