vererbungs problem



  • hallo

    ich will eigene iterator klasse für verkettete liste schreiben
    um nicht jedes mal eine komplett neue iterator klasse zu schreiben habe ich eine basis klasse für einen forward iterator geschrieben.
    aber jedes mal wenn eine klasse von CForward ableite und dann den
    postfix operator++ aufrufe bekomme ich eine warnung "C4620: no postfix form of 'operator ++' found for type 'Iterator', using prefix form"

    Sieht der kompiler operator++() und operator++(int) nicht als seperate überlandene Funktionen??
    Und gibt es noch andere möglichkeiten als operator++() virtual zu machen??

    vielen dank schon mal im vorraus

    AuRuX

    template<typename _Derived,typename _DataType>
    class CForward
    {
    public:
    	_Derived& operator=(const _Derived& Iterator)
    	{
    		memcpy(this,&Iterator,sizeof(_Derived));
    	}
    
            .....
    
    	_Derived& operator++()//prefix
    	{
    		return *((_Derived*)this);
    	}
    
    	_Derived operator++(int)//postfix
    	{
    		_Derived Iterator=*((_Derived*)this);
    		++(*((_Derived*)this));
    		return Iterator;
    	}
    };
    


  • Er sieht sie als getrennte Operatoren.

    Dein Zuweisungsoperator ist echt wahnsinn... Objekte mit memcpy zu kopieren... *graus*

    Außerdem ist CForward nicht vom Typ _Derived abgeleitet, sowas wie:

    (_Derived*) this
    

    funktioniert nicht auch wenn du den Zuweisungs-Operator überschrieben hast.

    operator++(CForward) wäre außerdem glaub ich als Funktionsdeklaration geschickter.


Anmelden zum Antworten