在循环中创建新结构

时间:2014-11-13 10:03:26

标签: c++ struct

我在循环中声明结构时遇到了问题。这是我的代码:

struct v;

struct e{
    e* next;
    bool choosen;
    v* target;
};

struct v {
    e* start;
    e* end;
    bool choosen;
    int skel; // how many edges in skeleton from this v
    int number;
};

void add(v* v1, e* e1) {
    if(v1->start==0) {
        v1->start=e1;
        v1->end=e1;
    }else{
        v1->end->next=e1;
        v1->end=e1;
    }
}

for(i=0;i<m;i++) {
    cin>>t1>>t2;
    e ed={0,false,&b[t2]};
    add(&b[t1], &ed);
}

我需要在for循环的每个循环中创建新的struct e并传入方法add。问题是,它只是重新定义了值,但是对象结构是相同的。毕竟,只有指向相同结构的指针。有什么方法可以解决它吗?像新的宣言?

编辑:我已经添加了整个代码,以清楚我在使用指针做什么。

1 个答案:

答案 0 :(得分:1)

注意结构ed仅在for-loop中有效,即它的可见性,所以如果你很幸运,你不会崩溃;

我建议使用:

for(i = 0; i < m; i++) {
    cin >> t1 >> t2;

    e* ed = new e();
    ed->next = 0x00;
    ed->choosen = false;
    ed->target = &b[t2];

    add(&b[t1], ed);
}

代替。不要忘记在从容器中取出元素时不再需要它们。