下面的代码在Visual Studio 2010上成功编译。
但是,当我在Linux Eclipse上编译它时,出现错误:

../src/test.cpp:23:27:错误:接收临时[-fpermissive]地址

MyNode *p1 = &(MyNode)*itr;


这是为什么?我必须改变什么?

代码:

#include <stdlib.h>
#include <stdio.h>
#include <map>
#include <list>

using namespace std;

typedef struct MyNode_
{
    int abc;
}MyNode;

int main() {

    list<MyNode> myList;
    list<MyNode>::iterator itr;

    for(itr=myList.begin(); itr != myList.end(); ++itr)
    {
        MyNode *p1 = &(MyNode)*itr; //this line cause compilation error in Eclipse

        printf("abc = %d", p1->abc);
    }

    return 0;
}

最佳答案

如果您确实必须这样做,请改为执行以下操作:

MyNode copy = *itr;
MyNode *p1 = &copy;


正如评论所言,尝试获取临时地址是行不通的,因为临时者在其所使用的行之后没有有效的内存地址。

关于c++ - 在Eclipse中获取临时地址时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57518429/

10-14 08:30