2010-08-14 77 views
3

我有一个类:问题与转换

 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 
    } 

为什么会出现错误?我提供了转换操作符,所以一切都应该没问题。

+0

你也可以删除转换,因为Iterator的构造函数已经允许相同的转换。 – UncleBens 2010-08-14 15:22:30

回答

3

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

当用户声明转换为Iterator时,它会产生一个临时Iterator对象。一个非const引用不能绑定到一个临时的,因此当你返回一个引用时你得到的错误。

也就是说,具有返回Iterator的转换函数最多是不寻常的。

+0

我不好,我只是没有把它放入例子。修复它在一秒钟内。 – smallB 2010-08-14 14:11:09