2010-07-31 66 views
1

上課:我怎麼能這個指針賦給我的迭代器類

template<class T> 
    class Link 
    { 
     Link* myParent_; 
     Link* myLeft_; 
     Link* myRight_; 
     T* myData_; 
     void assign_(Link<T>*& marker, Link<T>*& aLink); 
     void insert_(const T&);//inserts new data into a link 
     void insert_(const T*); 
     void remove_();//removes data from a link 
    public: 

     class Iterator : public iterator<std::bidirectional_iterator_tag, Link<T>*> 
     { 
     private: 
      Link<T>* myData_;//How can I assign object of external class to this link? Rest of the Q below. 
     public: 
      Iterator(); 
      Iterator& left()const; 
      Iterator& right()const; 
      Iterator& top()const; 
     }; 
}; 

我的意思是我怎麼能分配「這個」對象myData_和「這個」不myLeft_,myRight_或myParent_目的?

我想是這樣的:

template<class T> 
Link<T>* Link<T>::me() const 
{ 
    return const_cast<Link<T>*>(this); 
} 

和迭代器:

template<class T> 
Link<T>::Iterator::Iterator():myData_(nullptr) 
{ 
    myData_ = me();//call from external class to me(); 
} 

,但我得到一個錯誤:

錯誤1個錯誤C2352:「鏈接::我':非法呼叫非靜態成員函數

謝謝。

+0

請把標題有意義。 – 2010-07-31 12:33:49

回答

1

無論是通過構造函數:

Iterator(Link<T> *l) : myData_(l) {} 

或通過setter和getter:

void setData(Link<T> *d) { myData_ = d; } 
Link<T>* getData() const { return myData_; } 
+0

Get/Set(er)是一種代碼味道。您的類的接口應該是可以在對象上執行的操作,而不是允許您混淆基礎數據結構的接口。 – 2010-07-31 15:51:05

相關問題