我有一个班级:
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 :(得分:3)
begin()
无法返回对Iterator
的引用;它需要按值返回Iterator
。
当调用用户声明的转换为Iterator
时,它会生成一个临时的Iterator
对象。非const引用不能绑定到临时引用,因此当begin()
返回引用时会出现错误。
也就是说,拥有一个返回Iterator
的转换函数充其量是不寻常的。