Problem mit Listeniterator



  • Hallo Leute,

    erstmal mein Code:

    void KlasseA::vAbfertigung()
    {
    	list<KlasseB*>::iterator it;
    
    	for (it = p_ptKlasseB.begin(); it != p_ptKlasseB.end(); it++)
    	{
    		(*it)->vAbfertigung();
    	}
    }
    
    ostream& KlasseA::ostreamAusgabe(ostream& oAusgabe) const
    {
    	list<KlasseB*>::iterator it;
    
    	for (it = p_ptKlasseB.begin(); it != p_ptKlasseB.end(); it++) //C2679
    	{
    		oAusgabe << fixed << left << setw(8) << (*it)->getName();
    	}
    
    	return oAusgabe;
    }
    

    Und zwar bin ich etwas verwirrt über den C2679. Wieso kommt der Fehler lediglich in der 2ten Fkt? Weil sie const ist? Aber die Fkt ändert doch keine Membervariablen? Danke im Vorraus.

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

    mfg,
    Max



  • Maex2808 schrieb:

    Und zwar bin ich etwas verwirrt über den C2679. Wieso kommt der Fehler lediglich in der 2ten Fkt? Weil sie const ist? Aber die Fkt ändert doch keine Membervariablen?

    Ja, weil sie const ist. Es gibt zwei Versionen von begin() für Container, und zwar eine const-version, die einen const_iterator liefert, und eine non-const version. Der Compiler benutzt hier die const-version (weil dein Objekt und damit der container ja als const deklariert wurden), die einen const_iterator zurückgibt. Diesen weist du aber einem normalen iterator zu - und die dafür nötige Umwandlung existiert verständlicherweise nicht.
    Fazit: it muss ein const_iterator sein.



  • pumuckl schrieb:

    [...]

    Vielen Dank!


Anmelden zum Antworten