我不明白为什么下面的代码不起作用,知道吗?
template <class T>
class Matrice
{
public:
...
typedef typename std::vector<T>::const_iterator const_iterator;
const_iterator& cend ( )
{
return valeurs.cend ( );
}
...
private:
...
}
这是投诉人的投诉:
/ Users / Aleks / Documents / DS OO / DS OO / Matrice.h:70:16:非常量左值
对类型'const_iterator'的引用(又名'__wrap_iter')
无法绑定到'const_iterator'类型的临时文件(也称为
'__wrap_iter')
最佳答案
valeurs.cend
(cppreference)将实例返回到const_iterator
(即,它声明为const_iterator valeurs.cend()
)。
编译器需要创建一个temporary object(内存区域)来存储valeurs.cend()
返回的值。这段代码无法编译,因为您不能引用一个临时变量,因为后者不会超出函数调用的寿命。
您通常会按值返回一个迭代器:
typedef typename std::vector<T>::const_iterator const_iterator;
const_iterator cend ( )
{
return valeurs.cend ( );
}
这将确保
valeurs.cend()
返回的值被复制(或移动,在C ++ 11中,我相信)到其目标对象(如果您将返回的值分配给类型为const_iterator
的变量)或在调用Matrice<T>::cend()
的另一个临时目录中。有关详细信息,请参见MSDN解释的链接。