newbie c ++将列表迭代器转换为POD类型

时间:2013-05-28 12:59:52

标签: c++ casting

我有

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

2 个答案:

答案 0 :(得分:2)

double *ListIterator::next(void)
{
    double *res = &(*lit);
    lit++;
    return res;
}

答案 1 :(得分:0)

Postfix operator ++返回一个副本,在您使用它的上下文中,它是一个临时变量,一旦离开next就不会存在。虽然,我认为你的意思是获取迭代器内容的地址而不是迭代器本身。