2016-11-01 6 views
1

Vertice(Vertexクラス)がsに設定されているので、set<Vertice>::iterator itで参照されている項目のアドレスVertice *addressに入っています。つまり 、アドレスIterator項目

address = &(*it); 

しかし、

error: assigning to 'Vertice *' from incompatible type 
     'const value_type *' (aka 'const Vertice *') 

任意のアイデアを返しますか?

+0

は 'it it is iterator'または' const_iterator'ですか? – grigor

+0

イテレーターのみ... – WithoutNameZin

答えて

3

std::setに保存された要素は変更できません。std::set::iteratorも定数反復子です。これは、&(*it)の場合、非constへのポインタ(つまりVertice*)に割り当てることができないconst(つまりconst Vertice*)へのポインタを取得することを意味します。

addressのタイプをconst Vertice*に変更できます。 set

const Vertice* address = &(*it); 
+0

私はVertice * constが必要です。それは不可能ですか? – WithoutNameZin

+0

'std :: set'の要素を直接変更することはできません。なぜあなたは 'Vertice * 'を望んでいますか?どのような改造をしますか? – songyuanyao

+0

この時点ではVertice *は作成されません。それは以前に解決されたクラスの貢献です。しかし、それが不可能な場合、私はロジックを変更します... – WithoutNameZin

0

エントリは、(それがsetの不変量に​​違反する可能性が可能)外部コードによって変異させることができません。直接ポインターが必要な場合は、const Vertice*(安全で非変異型)でなければなりません。これは(setのエントリを突然変異させる可能性があります)ではありません。それはエラーがあなたに言っていることです。