我有
class ListIterator
{
public:
ListIterator(std::list<double>& ls) :lst(ls) {lit = lst.begin();}
double *next(void);
private:
std::list<double> lst;
std::list<double>::iterator lit;
};
此
double *ListIterator::next(void)
{
return((double *)&lit++);
}
生成错误:获取临时[-fpermissive]
的地址我不明白为什么&amp; lit ++正在采取临时的地址,因为它应该采取&amp;点亮然后增加它,永远不要介意点亮的++也不应该是暂时的。
此
double *ListIterator::next(void)
{
double *res = &lit;
lit++;
return res;
}
生成错误:无法在初始化中将'std :: list :: iterator * {aka std :: _ List_iterator }'转换为'double '
虽然这个
double *ListIterator::next(void)
{
return((double *)&lit);
}
编译没有问题
有人可以帮助我理解为什么吗?TIA, 雅尼斯
PS。我使用gcc 4.8和-std = c ++ 11
答案 0 :(得分:2)
double *ListIterator::next(void)
{
double *res = &(*lit);
lit++;
return res;
}
答案 1 :(得分:0)
Postfix operator ++
返回一个副本,在您使用它的上下文中,它是一个临时变量,一旦离开next
就不会存在。虽然,我认为你的意思是获取迭代器内容的地址而不是迭代器本身。