C ++ - 访问私有嵌套迭代器

时间:2013-03-23 10:07:29

标签: c++

我无法弄清楚如何解决这个问题。我的迭代器构造函数需要是私有的,所以我使用容器来返回一个迭代器,但是它拒绝编译。

A.H

class A {
    public:
        class iterator {
            friend class A;
            public:
                virtual ~iterator();
                iterator operator++(int);
                iterator operator--(int);

            private:
                iterator(int index, A container);
        };


        iterator begin();
        iterator end();

};

A.cpp

A::iterator A::begin(){
    return iterator(0, *this);
}

A::iterator A::end(){
    return iterator(length(), *this);
}

然后我这样称呼它:

for(A::iterator i = a.begin(); i != a.end(); i++)
    std::cout << *i;

但最后一个块表示“A :: iterator在此上下文中是私有的”。我有一种感觉迭代器构造函数只在begin()之外被调用,但我不知道如何修复它。我对C ++很新,所以任何帮助都会受到赞赏!

1 个答案:

答案 0 :(得分:3)

这是因为iterator类没有公共构造函数。您应该实现一个公共拷贝构造函数(可能还有一个拷贝赋值运算符(参见the rule of three))。