2010-07-31 29 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