Il problema è con questa parte del ciclo for
:
std::vector<Foo>::iterator it = var.begin(), i = 0
C++ è interpretare questo non con due prospetti separati da virgola, ma come una dichiarazione variabile per una variabile denominata it
che è un iteratore, e come una nuova dichiarazione di una variabile i
è un iteratore e inizializzata su 0. L'errore è dovuto al fatto che non è possibile inizializzare un iteratore vector
su 0.
Per risolvere questo problema, è necessario issare la definizione all'esterno del ciclo :
int i = 0;
std::vector<Foo>::iterator it = var.begin();
for(; it < var.end(); it++, i++)
{
// ...
}
Oppure spostare l'inizializzazione del i
fuori del ciclo:
int i = 0;
for(std::vector<Foo>::iterator it = var.begin(); it < var.end(); it++, i++)
{
// ...
}
C'è un ultima opzione, però. Se è necessario tenere traccia dell'indice nel vettore che si sta esaminando, è possibile considerare solo l'utilizzo di un ciclo di conteggio (senza l'iteratore), o semplicemente l'iteratore e l'uso della sottrazione iteratrice per recuperare l'indice:
for (auto it = var.begin(); it != var.end(); ++it) {
// current position is it - var.begin();
}
Spero che questo aiuti!
Usa ' ++ it' per incrementare iteratore, perché 'it ++' è il post-incremento e impiega tempo inutile. – marbel82