转换问题

时间:2010-08-14 14:03:08

标签: c++ templates

我有一个班级:

      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 个答案:

答案 0 :(得分:3)

begin()无法返回对Iterator的引用;它需要按值返回Iterator

当调用用户声明的转换为Iterator时,它会生成一个临时的Iterator对象。非const引用不能绑定到临时引用,因此当begin()返回引用时会出现错误。

也就是说,拥有一个返回Iterator的转换函数充其量是不寻常的。