Элемент Address Iterator
Наличие Vertice (класс вершин) установлен s
Хочу попасть в Vertice *address
адрес объекта, на который ссылается set<Vertice>::iterator it
, Другими словами,
address = &(*it);
Но возвращается
error: assigning to 'Vertice *' from incompatible type
'const value_type *' (aka 'const Vertice *')
Любая идея?
2 ответа
Элемент сохранен в std::set
не модифицируется, и std::set::iterator
также является постоянным итератором. Это значит для &(*it)
вы получите указатель на const (т.е. const Vertice*
), который не может быть назначен указателю на неконстантный (т.е. Vertice*
).
Вы можете изменить тип address
в const Vertice*
,
const Vertice* address = &(*it);
Записи в set
не может быть изменен внешним кодом (допуская, что это может нарушить set
инварианты). Если вы хотите прямой указатель (вы не должны), он должен быть const Vertice*
(безопасно, без мутаций), не Vertice*
(который может изменить запись в set
). Вот что говорит вам ошибка.