C++ 成员引用基类型'Vertex *const'不是结构或联合
C++ Member Reference base type 'Vertex *const' is not a structure or union
我在尝试访问存储在向量中的对象的方法时遇到麻烦。我知道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*
。因此,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
代替原始指针。
相关文章:
- 使用对const结构的const数组的引用进行构造
- 在只读(即 const)访问器上执行结构化绑定的最佳实践是什么?
- 如何使用函数的输出初始化 const 数组结构字段?
- 如何在类中声明静态 const 结构元素
- 获得const结构和CIN的功能
- 使用 C++ 中的自定义元素进行 Const 结构初始化
- 为什么在此模板结构中丢失了const
- 结构化绑定中的const引用扩展了分解对象的寿命
- const char指针在结构中声明
- 您如何使用成员正确初始化构造的结构,该构件是指向const值的const指针
- 用静态const成员构建类层次结构
- 如何将转换为 const char (C++) 的结构转换为结构 Objective-C
- 如何保证模板化结构中 const 静态成员的初始化顺序
- 错误:'const std::array<int, 3u>&'不是类、结构或联合类型
- C++ 成员引用基类型'Vertex *const'不是结构或联合
- 访问成员unordered_map中的数据时,C++const方法在结构中编译错误
- 为什么具有const成员的结构是可赋值的
- 使用const指针初始化const结构
- C++宏生成const结构
- 模板结构体的静态const成员的不同值