Funktion eines Objekts in einer Liste aufrufen



  • Hallo,
    ich bin der Neue! 😃

    Ich hab gerade mal folgende Frage: Ich will eine Liste anlegen, in welche ich Objekt{e|referenzen} eintragen kann. Nun möchte ich aber eine Funktion eines Objekts aufrufen - ich hab versucht, das ganze mal so kurz wie möglich zusammen zu basteln.

    #include <iostream>
    #include <list>
    
    class CObject
    {
        private:
            int a;
        public:
            CObject(int b)
            {
                a=b;
            }
            void Output()
            {
                std::cout<<a<<std::endl;
            }
    };
    
    int main(int argc, char *argv[])
    {
        CObject myObject1(1);
        CObject myObject2(2);
        std::list<CObject> myList;
    
        myList.push_back(myObject1);
        myList.push_back(myObject2);
    
        for (std::list<CObject>::iterator myIterator=myList.begin(); myIterator!=myList.end(); ++myIterator)
        {
            // Ich bin ratlos, wie ich folgendes angehen soll:
            // Aufrufen einer Funktion der Klasse CObject
            // (folgendes funktioniert ja so nicht: *myIterator.Output();
        }
        myObject1.Output();
        myObject2.Output();
    
        return EXIT_SUCCESS;
    }
    

    Erreiche ich damit vielleicht nicht einmal das Beabsichtigte (=Das Element in der Liste soll eine Referenz auf das Objekt werden.) - was ich zudem mal auch mit glaube.

    Ich wäre euch für Hinweise wirklich dankbar! 🙂

    Grüße,
    Mao



  • Wenn du wirklich mit * und . arbeiten willst, mußt du sie klammern ('.' hat höhere Priorität) (*myIterator).Output(); - aber als Abkürzung dafür gab es schon zu C-Zeiten den -> Operator myIterator->Output(); .



  • Oh, da hätt ich selbst drauf kommen (müssen). 😞
    Danke dir!



  • da gibts noch die variant mit "for_each", welceh für jede Objekt eine aktion/methode ausführt!

    #include <functional>
    std::or_each(myList.begin(),myList.end(),std::mem_fun_ref(&CObjekt::Output));
    


  • Danke auch für diese Möglichkeit! 🙂


Anmelden zum Antworten