преобразование в нескалярный тип в итерации по вектору внутри множества - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть набор векторов указателя. Я пытаюсь перебрать выбранный вектор из набора.

Код не компилируется, поскольку происходит преобразование из * const* в нескалярный тип **.

error: conversion from ‘__normal_iterator<Foo* const*,[...]>’ to non-scalar type ‘__normal_iterator<Foo**,[...]>’ requested

Я читал, что это потому, чтопоскольку набор c ++ 11 не имеет непостоянных итераторов ( Ошибка C ++: преобразование в нескалярный тип ). Но я не знаю, как привести его так, чтобы он работал.

Минимальный код, который показывает ошибку

#include <set>
#include <vector>

using namespace std;

class Foo {
  int v;
};

int main() {
  set<vector<Foo *>> setVecF;
  vector<Foo *> vecF;
  Foo * f = new Foo;

  vecF.push_back(f);
  setVecF.insert(vecF);

  set<vector<Foo *>>::iterator sit(setVecF.begin());
// the line below does not compile  
//vector<Foo *>::iterator vit = sit->begin();
  return 0;
}

Я ожидаю, что vit будет указывать на началовыбранный вектор внутри набора, чтобы я мог перебрать его. Но это не так, как я не могу использовать ->begin() на sit. Есть идеи как это сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...