【发布时间】:2013-06-10 00:27:51
【问题描述】:
我对 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& 或 Iterator 类型传递,但都没有成功。
如果有任何反馈,我们将不胜感激。
【问题讨论】:
-
不确定这是否是唯一的问题,但您需要一些
typenames,例如:typename List<T>::Iterator -
Node不是类模板。只说Node,而不是Node<T>。List是一个模板,所以说List<T>::Node。 -
这实际上解决了它,谢谢。安迪,如果您重新发布作为答案,我会接受。
-
另外,不要用类中的类名来限定成员函数声明(例如
void remove(...),而不是void List<T>::remove(...)。 -
另外,
It.node=tail应该是It.node==tail;)