无法从派生类

时间:2017-09-15 06:54:12

标签: c++

总之,我的问题是我想找到一种方法来访问迭代器从派生类指向的元素。详情如下。

我正在实现一个带有双链表的序列,参考“C ++中的数据结构和算法”一书(由Goodrich,Tamassia,Mount编写),第255页。本书将NodeSequence类定义为派生类双重链表。

这是代码。首先,我使用struct Node和class Iterator创建了一个双向链表类。 (这保存为“DList.h”)

typedef int E;

class DList {
private:
struct Node {
    E element;
    Node* prev;
    Node* next;
};

public:
    class Iterator {
    public:
        E& operator*();//reference to the element
        bool operator==(const Iterator& p) const;
        bool operator!=(const Iterator& p) const;
        Iterator& operator++();
        Iterator& operator--();
        friend class DList; //gives access to the DList
    private:
        Node* v; //pointer to the node
        Iterator(Node* u); //create from Node
};

public:
    DList();
    int size() const;
    bool empty() const;
    Iterator begin() const;
    Iterator end() const;
    void insertFront(const E& e);
    void insertBack(const E& e);
    void insert(const Iterator& p, const E& e);
    void eraseFront();
    void eraseBack();
    void erase(const Iterator& p);
    void printList(); 

private:
    int n;
    Node* header;
    Node* trailer;
};

接下来,我创建了一个名为“NodeSequence”的DList派生类,其定义如下

#include "DList.h"
class NodeSequence : public DList{ //NodeSequence class inherits DList class
public:
    Iterator atIndex(int i) const ; //get position from index 
    int indexOf(const Iterator& p) const; //get index from position
};

最后,我想测试我的代码,所以我演示如下。

int main() {
    NodeSequence test;
    test.insertBack(5);
    test.insertBack(4);
    test.insertBack(3);
    test.insertBack(2);
    test.insertBack(1);

NodeSequence::Iterator p= test.atIndex(1);
cout << (p.v)->element() << endl; 
// I expected 4, but it gives compile error, it says I can't access to p.v because it is a private member

}

有没有办法可以访问迭代器的私有元素(它是一个指针)?我不想将Node * v从私有更改为public。

0 个答案:

没有答案