C++ 成员引用基类型'Vertex *const'不是结构或联合
Posted
技术标签:
【中文标题】C++ 成员引用基类型\'Vertex *const\'不是结构或联合【英文标题】:C++ Member Reference base type 'Vertex *const' is not a structure or unionC++ 成员引用基类型'Vertex *const'不是结构或联合 【发布时间】:2014-11-23 06:49:15 【问题描述】:我在尝试访问存储在向量中的对象的方法时遇到了麻烦。我知道 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();
给了我同样的错误。
【问题讨论】:
粘贴 getEdges 定义... 是:返回边; 边被声明为:std::unordered_map<:string edge>边; 【参考方案1】: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
代替原始指针。
【讨论】:
只是我不明白他为什么需要使用指针?为什么不std::vector<Vertex>
以上是关于C++ 成员引用基类型'Vertex *const'不是结构或联合的主要内容,如果未能解决你的问题,请参考以下文章