У меня есть набор векторов указателя. Я пытаюсь перебрать выбранный вектор из набора.
Код не компилируется, поскольку происходит преобразование из * 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
. Есть идеи как это сделать?