2015-05-24 98 views
1

我有一個稱爲OrderedList的名稱空間MYLIB中的類。其中我有一個名爲迭代器的嵌套類,它將用作OrderedList類的迭代器。C++:創建一個迭代器嵌套類的實例

下面是我創建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) 
    ^
+0

請粘貼代碼(文本)而不是圖片。 –

+2

每次發佈代碼圖片時,都會有一隻小貓死亡。請*請*不要那樣做。 – WhozCraig

+0

哈哈@WhozCraig。我相信發佈的圖片比文本更清晰,因爲您可以參考行號:) –

回答

1

在C++中,引用必須在成員初始化中初始化l ist,它不能在coustructor體中初始化。

您需要更改您的代碼

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

,而不是使用賦值。

對引用的賦值做了不同的事情(它分配引用引用的原始對象)。你不能改變一個引用的約束。

PS:爲什麼要在那裏停下來,而不是爲了if ((is_end == false) == true)? ;-)

+0

感謝堆它工作:)好吧,是的,我可以做到這一點,但我喜歡我的代碼分散出來,以便將來的參考清楚。這種表示法有時候可能不清楚,特別是如果你一段時間沒有完成C++,然後在一段時間後再回到這段代碼將會有點困難。 –