C++ 成员引用基类型'Vertex *const'不是结构或联合

C++ Member Reference base type 'Vertex *const' is not a structure or union

本文关键字:结构 const Vertex 引用 成员 基类 类型 C++      更新时间:2023-10-16

我在尝试访问存储在向量中的对象的方法时遇到麻烦。我知道getEdges返回了边缘的无序映射,但是我缺少如何从向量中引用顶点对象的内容。帮助?

In void UndirectedGraph::minSpanningTree():

std::vector<Vertex*> visited;
if(vertices.begin() != vertices.end())
{
    visited.push_back(vertices.begin()->second);
    visited[0]->distance = 0;
}
else
{
    return;
}
std::vector<Vertex*>::const_iterator vit;
vit = visited.begin();
std::unordered_map<std::string, Edge> edges;
edges = vit -> getEdges();

In const std::unordered_map & Vertex::getEdges() const:

return edges;

错误:

 UndirectedGraph.cpp:112:21: error: member reference base type 'Vertex
 *const' is
       not a structure or union
         edges = vit -> getEdges();
                 ~~~ ^  ~~~~~~~~ 1 error generated.

--编辑--

改变

edges = vit -> getEdges();

edges = *(vit)->getEdges();

给了我同样的错误。

vit是一个迭代器。迭代器的工作方式类似于指向容器元素的指针。您的容器元素类型为 Vertex* 。因此,vitVertex**一样工作。

要调用给定Vertex** p的成员函数,您必须先到达Vertex*。这可以通过取消引用p来完成,如下所示:

(*p)

此时,您可以像

(*p)->getEdges()

迭代器也不例外。

注意

*(p)->getEdges()

与上述完全不同(也是错误的)。它与

*((p)->getEdges())

(p)->getEdges()

p->getEdges()

已知不起作用。

在相关的说明中,如果您使用原始指针,则可能做错了。应将Vertex对象直接存储在std::vector<Vertex>中,或使用shared_ptrunique_ptr代替原始指针。