2017-07-20 1 views
0

Ich habe einige SO Links gesehen, wo ähnliche Fehler & vorgeschlagen wurde, const Referenz auf den Vektor zu verwenden, als sie den Vektor kopieren (pass nach Wert), aber in meinem Szenario verwende ich den gleichen Vektor (kein Wert nach Wert). Sehe dieses Problem. WRT Code unten, ich sehe den FehlerIn C++, debug Assertion fehlgeschlagen Fenster erscheint & ich bekomme Vektor Iteratoren inkompatiblen Fehler Laufzeit

Debug Assertion Fenster fehlgeschlagen erscheint & I-Vektor Iteratoren inkompatibel Fehler

in Laufzeit, wenn die Leitung

itloop !=-endIter 
bekommen

ist getroffen.

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++) 
    { 

    } 
} 

Antwort

3

Es sieht aus wie Sie zwei Iteratoren vergleichen, die zu verschiedenen vector Objekte entsprechen.

Zum Beispiel

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

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

Obwohl iter_a und iter_b sind vom gleichen Typ, sie ist der Vergleich nicht erlaubt. Die Verwendung von iter_a == iter_b oder iter_a != iter_b ist Ursache für undefiniertes Verhalten.

Aus Ihrem Beitrag geht nicht hervor, warum Sie die Iteratoren vergleichen müssen, aber Sie müssen Ihre Implementierungsstrategie überdenken.

+0

danke. Ich korrigiere meinen Fehler, beobachte aber immer noch denselben Fehler. Hatte hier eine andere Frage hier https://stackoverflow.com/questions/45264761/vector-iterators-incompatible-error-for-a-vector-holding-iterators-of-another-ve – codeLover

Verwandte Themen