Problem mit Iterator-const correctness



  • Hallo,
    ich habe einen map-Container als Member, in dem ich nach einem best. gemappten Wert suche. Das problem besteht darin, dass alle map-Funktionen mir einen const_iterator zurückgeben, ich aber einen non-const-qualified-Iterator zum späteren Entfernen des Elements brauche. Dieses Verhalten kann ich nicht nachvollziehen. Hier der Code (alles passiert in einer Klasse):

    std::map<std::string, BBox>::iterator BBit;
    	for (BBit = PIIs_in_XML.begin(); BBit != PIIs_in_XML.end(); ++BBit)
    		//[...]
    

    Die Membervariable ist so deklariert bzw. initialisiert:

    std::map<std::string, BBox> PIIs_in_XML;
    //[...]
    //ctor:
    	XMLParser parser (confINI->at("XMLfileLocation"));
    	PIIs_in_XML = parser.get_PII_files();
    

    Der Compiler sagt dann

    error C2679: Binärer Operator '=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::_Tree_const_iterator<_Mytree>' akzeptiert (oder keine geeignete Konvertierung möglich)

    Ich dachte die map-Methoden liefern konstante Iteratoren nur, wenn das Objekt konstant ist - und das ist es in meinem Fall bestimmt nicht. Danke für die Antworten.



  • Ist die Methode, in der dieser Code steht,

    [Rewind] schrieb:

    std::map<std::string, BBox>::iterator BBit;
    	for (BBit = PIIs_in_XML.begin(); BBit != PIIs_in_XML.end(); ++BBit)
    		//[...]
    

    const ??



  • Antwort: facepalm.



  • > zum späteren Entfernen des Elements

    braucht man ab C++11 auch nur noch einen const_iterator. erase ist natürlich weiterhin nicht const-qualifiziert.


Anmelden zum Antworten