[英]C++ Member Reference base type 'Vertex *const' is not a structure or union
尝试访问存储在向量中的对象的方法时遇到麻烦。 我知道getEdges返回边缘的无序贴图,但是我缺少如何从向量中引用Vertex对象的东西。 救命?
在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();
在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*
。 因此, vit
工作方式类似于Vertex**
。
要调用给定Vertex** p
的成员函数,您必须先进入Vertex*
。 可以这样取消p
的引用:
(*p)
现在您可以像这样调用您的成员函数
(*p)->getEdges()
迭代器没有什么不同。
注意
*(p)->getEdges()
与上述完全不同(而且是错误的)。 与...相同
*((p)->getEdges())
和
(p)->getEdges()
是相同的
p->getEdges()
这是行不通的。
与此相关的是,如果使用原始指针,则可能做错了。 您应该将Vertex
对象直接存储在std::vector<Vertex>
或者使用shared_ptr
或unique_ptr
代替原始指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.