Как я могу назначить этот указатель на мой класс итератора - PullRequest
1 голос
/ 31 июля 2010

Имея класс:

    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; 
        };
};

Что я имею в виду, как я могу назначить объект "this" объекту myData_, а не объекту myLeft_, myRight_ или myParent_ для объекта "this"?

Я пробовал что-то вроде этого:

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: «Link :: me»: недопустимый вызов нестатической функции-члена

Спасибо.

1 Ответ

1 голос
/ 31 июля 2010

Либо через конструктор:

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

Или через установщик и получатель:

void setData(Link<T> *d)  { myData_ = d; }
Link<T>* getData() const { return myData_; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...