将Vertice(Vertex类)设置为s
,我想进入Vertice *address
set<Vertice>::iterator it
引用的项目的地址。
换句话说,
address = &(*it);
但是,返回
error: assigning to 'Vertice *' from incompatible type
'const value_type *' (aka 'const Vertice *')
有什么想法吗?
答案 0 :(得分:3)
std::set
中保存的元素不可修改,std::set::iterator
也是const迭代器。这意味着对于&(*it)
,您将获得指向const(即const Vertice*
)的指针,该指针不能分配给指向非const的指针(即Vertice*
)。 / p>
您可以将address
的类型更改为const Vertice*
。
const Vertice* address = &(*it);
答案 1 :(得分:0)
外部代码无法突变set
中的条目(允许它违反set
个不变量)。如果你想要一个直接指针(你不应该)它需要const Vertice*
(安全,非变异),而不是Vertice*
(这可能会改变set
中的条目)。这就是错误告诉你的。