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);
}

問題なくコンパイル

誰かが理由を理解するのを手伝ってもらえますか?

ティア、ヤニス

ps。-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 に答える