2017-07-20 3 views
0

J'ai vu quelques liens SO où une erreur similaire a été vue & a été suggéré d'utiliser la référence constante au vecteur comme ils copiaient le vecteur (passe en valeur) mais dans mon scénario j'utilise le même vecteur (pas de passage en valeur). BUt voir ce problème. WRT ci-dessous le code, je vois l'erreurEn C++, la fenêtre d'échec de l'assertion de débogage apparaît et j'obtiens des itérateurs vectoriels incompatibles erreur d'exécution

assertion de débogage fenêtre échoué saute vers le haut & je reçois vecteur itérateurs erreur incompatible

dans l'exécution lorsque la ligne

itloop !=-endIter 

est atteint.

typedef vector<vector<string> tableDataType; 
vector<tableDataType::Iterator> tabTypeIterVector; 
tableDataType table; 
FillRows(vector<string> vstr) 
{ 
    table.push_back(vstr); 
    if(some_condition_satisfied_for_this_row()) 
    { 
     tableDataType::Iterator rowIT = table.end(); 
     tabTypeIterVector.push_back(rowIT); 
    } 
} 


In another function: 

AccessTableIteratorsVector() 
{ 
auto startIter = table.begin(); 
auto endIter = tabTypeIterVector[0]; 
    for(auto itloop=startIter; itloop !=-endIter;itloop++) 
    { 

    } 
} 

Répondre

3

Il semble que vous comparez deux itérateurs qui correspondent à différents objets vector.

Par exemple,

std::vector<int> a(5); 
std::vector<int> b(5); 

auto iter_a = a.begin(); 
auto iter_b = b.begin(); 

Même si iter_a et iter_b sont du même type, en les comparant n'est pas autorisé. L'utilisation de iter_a == iter_b ou de iter_a != iter_b est à l'origine d'un comportement indéfini.

Il n'est pas clair dans votre message pourquoi vous avez besoin de comparer les itérateurs, mais vous devrez repenser votre stratégie de mise en œuvre.

+0

merci. J'ai corrigé mon erreur, mais en observant toujours la même erreur. Élevé une question différente pour cela ici https://stackoverflow.com/questions/45264761/vector-iterators-incompatible-error-for-a-vector-holding-iterators-of-another-ve – codeLover