Элемент 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). Вот что говорит вам ошибка.

Другие вопросы по тегам