0

我对 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 类型传递,但都没有奏效。

任何反馈将不胜感激。

4

1 回答 1

1

除了其他人在问题评论中提到的问题外,您的(第一个)问题似乎是您需要使用typename消歧器:

    typename List<T>::Iterator
//  ^^^^^^^^

这告诉编译器它应该解析Iterator为一个类型的名称,而不是一个数据成员的名称List<T>

于 2013-06-13T15:33:23.447 回答