2016-11-01 11 views
1

Имея набор вершин (класс вершин) s, я хочу получить в Vertice *address адрес пункта, на который ссылается set<Vertice>::iterator it. Другими словами,Адрес Iterator item

address = &(*it); 

Но, возвращает

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

Любая идея?

+0

является 'it'' итератором' или 'const_iterator'? – grigor

+0

итератор только ... – WithoutNameZin

ответ

3

Элемент, сохраненный в std::set, не подлежит изменению, и std::set::iterator также является итератором константы. Это означает, что для &(*it) вы получите указатель на const (т. Е. const Vertice*), который не может быть назначен указателю на неконстантный (то есть Vertice*).

Вы можете изменить тип address на const Vertice*.

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

Мне нужна Vertice * not const. Разве это невозможно? – WithoutNameZin

+0

Изменение элемента 'std :: set' напрямую невозможно. Почему вы хотите «Вертикаль»? Какую модификацию вы бы сделали? – songyuanyao

+0

Vertice * не создан на данный момент. Это классный атрибут, который ранее был установлен. Но, если это невозможно, я изменю логику ... – WithoutNameZin

0

Записи в set не может мутировать извне кодом (что позволяет ему может нарушить set сек инварианты). Если вам нужен прямой указатель (вы не должны), он должен быть const Vertice* (безопасный, не мутирующий), а не Vertice* (который может изменить запись в set). Это то, о чем вам говорит ошибка.

 Смежные вопросы

  • Нет связанных вопросов^_^