Проблема с конвертацией - PullRequest
       2

Проблема с конвертацией

3 голосов
/ 14 августа 2010

У меня есть класс:

      template<class T>
        class MyClass
        {
        public:
                class Iterator {
    public:
    Iterator(MyClass<T>&){/*some code*/};
    };


  operator Iterator();
    Iterator& begin();
        };

    template<class T>
    MyClass<T>::operator typename MyClass<T>::Iterator()
    {
        return MyClass::Iterator(*this);
    }

    template<class T>
    typename MyClass<T>::Iterator& MyClass<T>::begin()
    {
        return *this;//<---------------cannot convert from MyClass to MyClass<T>::Iterator
    }

Почему я получаю ошибку? Я предоставил оператор преобразования, поэтому все должно быть хорошо.

1 Ответ

3 голосов
/ 14 августа 2010

begin() не может вернуть ссылку на Iterator; необходимо вернуть Iterator по значению.

Когда вызывается объявленное пользователем преобразование в Iterator, получается временный объект Iterator. Неконстантная ссылка не может быть привязана к временной, поэтому вы получаете ошибку, когда begin() возвращает ссылку.

Тем не менее, иметь функцию преобразования, которая возвращает Iterator, в лучшем случае необычно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...