1

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

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++ 相当陌生,所以任何帮助将不胜感激!

4

1 回答 1

4

这是因为iterator该类没有公共构造函数。您应该实现一个公共复制构造函数(可能还有一个复制赋值运算符(参见三规则))。

于 2013-03-23T10:13:13.050 回答