operator ++ ()



  • Hallo...
    Eigtl ist es ja kein Problem, Operatoren zu überladen, aber mal angenommen:

    struct zeichen
    	{
    		private:
    			char w;
    			zeichen *pNext;
    		public:
    //GetChar () und andere Funktionen, damit das Sinn macht ^^
    			zeichen& operator ++ (void)
    				{
    					this = this->pNext;
    					return *this;
    				};
    	};
    

    Eigentlich ist damit denk ich klar, was ich will - und anscheind geht es nicht, weil this als T * const definiert ist...
    Aber wie soll man so was dann hinbekommen? Gibts da überhaupt ne Möglichkeit?

    Der Vollständigkeit halber mal noch die Fehlermeldung des Compilers - aber das sollte ja eigtl klar sein:

    error C2106: '=': Linker Operand muss ein L-Wert sein
    

    Danke schon mal : >



  • hallo,

    den this-zeiger zu verändern, was soll das bringen

    machs doch so

    struct zeichen
    {
    private:
        char w;
        zeichen *pNext;
    public:
    //GetChar () und andere Funktionen, damit das Sinn macht ^^
        zeichen& operator ++ (void)
        {
            return *(this->pNext);
        };
    };
    

    oder aber du machst das mit iteratoren

    struct zeichen
    {
    private:
        char w;
        zeichen *pNext;
    public:
    //GetChar () und andere Funktionen, damit das Sinn macht ^^
        class iterator
        {
        public:
            iterator(Zeichen *p = 0) pZeichen(p)
            {}
            bool operator == (const iterator &k)
            {
                return this == &k;
            }
            .....
        private:
            zeichen *pZeichen;
        };
        zeichen& operator ++ (void)
        {
            return *(this->pNext);
        };
        iterator begin();
        {
            return iterator(this);
        }
        iterator end();
        {
            return iterator(0);
        }
        friend class iterator;
    };
    

    mfg helferlein



  • Naja - das so was geht:

    //zeichen *string;
    for (zeichen *iter (string); iter != NULL; ++iter)
    {
    iter->GetChar ();
    }
    

    Aber da werd ich wo wirklich nich um iteratoren rumkommen (dachte nur, dasses da irgend ne gaaaaaaanz dreckige und böse lösung gibt - ist eh nur ne aufgabe für die uni ^^) : /

    Danke ^^



  • gibt es 🙂

    du kannst ja in der klasse einen zeiger deklarieren der zu begin auf this gesetzt ist. den kannst du dann weitersetzen

    class zeichen
    {
    public:
        zeichen()
        {
            ptr = this;
        }
        void operator ++ ()
        {
            if (ptr)
                ptr = ptr->pNext;
        }
        char GetChar()
        {
            return ptr->w;
        }
    private:
        zeichen *ptr, *pNext;
        char w;
    };
    


  • die lösung gefällt mir so gar richtig sehr : )

    danke helferlein 🤡

    bb


Anmelden zum Antworten