Изменить указатель класса C ++, если он представлен в виде итератора

Скажем, у меня есть два класса, определенных как таковые:

namespace DecaveNamespace {
class MyElt1 {
public:
list<MyElt2>::iterator elt2;
}

class MyElt2 {
public:
list<MyElt1>iterator elt1;
}
}

Другими словами, для всех намерений и целей каждый класс имеет указатель на элемент другого класса, который инкапсулируется как итератор.

Теперь скажите, что я выполняю некоторую логику в функции и хочу обновить указатель в MyElt1 указать на другой экземпляр класса MyElt2, Другими словами:

// ... some logic
MyElt1 some_elt_1 = some_logic();
MyElt2 some_elt_2 = some_logic_2();

some_elt_1.elt2 = &some_elt_2;

Если я пытаюсь сделать выше, я получаю вышеупомянутую ошибку компилятора:

/usr/include/c++/4.8.2/bits/stl_list.h:125:12: note:   no known conversion for argument 1 from ‘DecaveNamespace::MyElt2*’ to ‘std::_List_iterator<DecaveNamespace::MyElt2>&&’

Ясно, что проблема в том, что я передаю неправильный адрес в ссылку на итератор. А то как мне обновить MyElt1указатель на новый объект?

2

Решение

Итератор списка по определению является итератором в список. Он может указывать только на объекты, принадлежащие списку. Ваш единственный выбор — поместить объект в список, чтобы вы могли получить к нему итератор.

Если объект уже находится в списке, найдите его в списке, чтобы получить к нему итератор. Обратите внимание, что хранение итераторов в классах опасно, поскольку многие операции со списком делают его итераторами недействительными.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]