0

我有

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]

我不明白为什么 &lit++ 采用临时地址,因为它应该采用 & 的 lit 然后递增它,别介意 lit++ 也不应该是临时的。

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,雅尼斯

附言。我正在使用带有 -std=c++11 的 gcc 4.8

4

2 回答 2

2
double *ListIterator::next(void)
{
    double *res = &(*lit);
    lit++;
    return res;
}
于 2013-05-28T13:13:19.783 回答
0

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

于 2013-05-28T13:06:47.310 回答