嵌套类指针访问

时间:2013-06-13 14:49:26

标签: c++ class pointers c++11

我对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;或迭代者,都没有工作。

非常感谢任何反馈。

1 个答案:

答案 0 :(得分:1)

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

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

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