C ++:创建迭代器嵌套类

时间:2015-05-24 06:17:32

标签: c++ templates reference nested-class

我在命名空间MYLIB中有一个名为OrderedList的类。在其中我有一个名为iterator的嵌套类,它将用作OrderedList类的迭代器。

以下是我创建OrderedList和迭代器类的代码片段:

    template<class T>
    class OrderedList
    {
        private:
            ListNode<T>* head;
            ListNode<T>* tail;
            int total;
        public:
            OrderedList(T[],int);
            ~OrderedList();
            void insert(const T&);
            void sort(int);
            void output();
            class iterator
            {
                private:
                    ListNode<T>* curr;
                    int current;
                    OrderedList& order;
                public:
                    iterator(OrderedList& ord, bool is_end)
                    {
                        this->order = ord; //problem is here
                        if(is_end == false)
                        {...

我的主要功能片段:

int main()
{
    int one[5] = {9,7,5,4,1};
    MYLIB::OrderedList<int> odd(one,5);
    odd.output();

    MYLIB::OrderedList<int>::iterator starter(odd,false);

当我编译它时,给出了以下错误:

OrderedList.cpp: In instantiation of ‘MYLIB::OrderedList<T>::iterator::iterator(MYLIB::OrderedList<T>&, bool) [with T = int]’:
OrderedList.cpp:215:53:   required from here
OrderedList.cpp:47:6: error: uninitialized reference member ‘MYLIB::OrderedList<int>::iterator::order’ [-fpermissive]
      iterator(OrderedList& ord, bool is_end)
      ^

1 个答案:

答案 0 :(得分:1)

在C ++中,必须在成员初始化列表中初始化引用,它不能在coustructor体中初始化。

您需要将代码更改为

iterator(OrderList& ord, bool is_end) : order(ord) {
    if (is_end == false) {
        ...
    }
}

而不是使用作业。

对引用的赋值执行不同的操作(它指定引用引用的原始对象)。您无法更改引用绑定的内容。

PS:为什么要停在那里而不去if ((is_end == false) == true)? ; - )