返回一个与对象相同的解除引用的迭代器?

时间:2013-09-02 03:34:56

标签: c++

我正在尝试从向量中返回类型为Vertex的对象。我只能使用迭代器;返回一个解除引用的迭代器做我想要的吗?更确切地说,我希望将v2初始化为我正在返回的Vertex的指针:即:

Vertex* v2;
v2 = &(p_graph->getVertex(vert2));

为了做到这一点,我必须使用getVertex()来返回Vertex,并将其添加到&制作指针并将其指定给v2getVertex()函数是:

Vertex Graph::getVertex(std::string v) {         // gets the vertex 
    for (std::vector<Vertex>::iterator it = vertices.begin(); it != vertices.end(); it++) {
        if ((it->getName()).compare(v) == 0)
            return *it;  // if strings are the same return vertex
    }
    exit(1);
}

但是我无法分配它,所以在我试图找几个小时的代码的这一部分某处出现了错误。

1 个答案:

答案 0 :(得分:4)

问题在于您正在尝试获取临时地址。

(p_graph->getVertex(vert2));

表达式(p_graph->getVertex(vert2))返回一个临时表,此临时表的生命周期为;

情景更像是 -

Vertex *v2 = & Vertex();

您可以选择const限定v2,从而延长此类临时工作的续航时间。试试 -

const Vertex* v2 = &(p_graph->getVertex(vert2));