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クラスにパブリックコンストラクターがないためです。パブリックコピーコンストラクター(およびおそらくコピー代入演算子(3のルールを参照))を実装する必要があります。

于 2013-03-23T10:13:13.050 に答える