не удается получить доступ к итератору std :: map из включающего класса - PullRequest
0 голосов
/ 02 октября 2019

Обновление: Оказывается, код ниже действительно работает. Моя проблема может быть чем-то не связанным, хотя я не вижу разницы между реальным кодом. Все еще выясняю.

Этот простой код на С ++ не выполняется во время выполнения, за исключением. Я думаю, что я пропускаю какое-то ограничение доступа в конструкторе для карт. У меня есть класс, определенный следующим образом:

class Child {
  public:
    Child() {
      auto itr1 = this->child_map.begin();  // works
    };
    ~Child() {};

    std::map<int,int> child_map;
    std::vector<int> child_vector;
};

class Parent {
  public:
    Parent();
    ~Parent() {};
    Child child_one;
};

Parent::Parent() {
  auto itr2 = this->child_one.child_vector.begin(); // works
  auto itr3 = this->child_one.child_map.begin(); // null pointer exception
}

Parent parent_obj;

Вызов итератора на карте не удается только из родительского конструктора. Векторный итератор работает просто отлично. Я уже пытался добавить класс друга в обе стороны и все еще получил то же исключение. если я посмотрел источник, _Get_data () возвращает nullptr и не может вызвать _Lmost () ниже

_NODISCARD iterator begin() noexcept
    {   // return iterator for beginning of mutable sequence
    auto& _My_data = this->_Get_data();
    return (iterator(_My_data._Lmost(), _STD addressof(_My_data)));
    }

, попытался выполнить поиск в Интернете, и пока не получилось. что мне здесь не хватает?

1 Ответ

0 голосов
/ 02 октября 2019

Неправильный memset на указателе класса, который был пропущен. Удивительно, но из-за этого

произошел сбой только итератора std :: map
...