我对c ++很新,在尝试创建链接列表时遇到了一个我不理解的错误。
代码:
template <typename T>
class List{
class Node{
T data;
Node<T> *next;
Node<T> *previous;
Node<T>(T& data,const Node<T> *next,const Node<T> *previous): data(data),
next(next),previous(previous){
};
};
Node<T> *head;
Node<T> *tail;
int size;
public:
class Iterator{
Node<T> *node;
List<T> *list;
};
void List<T>::remove(List<T>::Iterator& It){
if(It.list!=this){ // FIELD list COULD NOT BE RESOLVED
throw NON_MATCHING_LIST();
}
if(size==0 || It.node=tail){ //FIELD node COULD NOT BE RESOLVED
throw ELEMENT_NOT_FOUND();
}
It.node->previous=It.node->next; //FIELD node COULD NOT BE RESOLVED (and naturally the rest).
It.node->next->previous=It.node->previous
}
};
在我的删除函数中,我试图删除迭代器之前的列表成员,唉我收到错误说
无法解析节点/列表字段
我已经尝试将迭代器作为类型Iterator&amp;或迭代者,都没有工作。
非常感谢任何反馈。
答案 0 :(得分:1)
除了其他人在问题评论中提到的问题之外,您的(第一个)问题似乎是您需要使用typename
消歧器:
typename List<T>::Iterator
// ^^^^^^^^
这告诉编译器它应该将Iterator
解析为类型的名称,而不是List<T>
的数据成员的名称。