Funktionen aus Klassen übergeben



  • Hi

    ist wahrscheinlich ne stupide Frage, aber ich komme nicht weiter...

    Ich will die Funktion

    int scandir(const char *dir, struct dirent ***namelist,
                  int(*filter)(const struct dirent *),
                  int(*compar)(const struct dirent **, const struct dirent **));
    

    verwenden, und zwar wie folgt:

    int NumberOfFiles = scandir(xmldir.c_str(), &dirlist, CheckIfNeeded, alphasort);
    

    CheckIfNeeded ist dabei Element der selben Klasse cWThread, in welcher auch die Funktion ist, die scandir aufruft. Jetzt erhalte ich folgenden Fehler beim Kompilieren:

    wthread.c:86: error: argument of type ‘int (cWThread::)(const dirent*)’ does not match ‘int (*)(const dirent*)’
    

    Was muss ich ändern??

    Mfg,
    balta



  • Das geht schlicht & einfach so nicht.



  • bluecode schrieb:

    Das geht schlicht & einfach so nicht.

    Wie dann?? Habe CheckIfNeeded schon aus der Klasse rausgenommen und es geht... nur dann müsste ich noch mehr "auslagern"



  • balta schrieb:

    bluecode schrieb:

    Das geht schlicht & einfach so nicht.

    Wie dann?? Habe CheckIfNeeded schon aus der Klasse rausgenommen und es geht... nur dann müsste ich noch mehr "auslagern"

    Jo, genau nur so gehts. Du kannst net einfach nen Zeiger auf ne Memberfunktion übergeben, wenn die Funktion nur einen normalen Funktionszeiger erwartet, da das Aufrufen von Memberfunktionen anders funktioniert(es muss ja schließlich im Funktionspointer auch ein Zeiger auf die Klasse vorhanden sein, um später der Funktion einen this-> zur Verfügung zu stellen) ist als das von normalen Funktionen. Also entweder die aufzurufende Funktion verändern, was wahrscheinlich nicht gehen wird, ne globale Funktion oder aber eine static Memberfunktion (=> kein this Zeiger verwendbar) übergeben.
    Wenns deine Klasse nur einmal gibt (im ges. Programm) dann kannst nen Singleton draus machen und ne static memberfunktion, dann kannst in der memberfunktion sogar ne klasseninstanz verwenden.



  • wthread.h:33: error: invalid use of member ‘cWThread::NeededFiles’ in static member function
    wthread.c:106: error: from this location
    

    meintest du das mit fehlendem this??

    das mit dem singleton scheint ja komplizierter zu sein. Auch wenn es von dieser Klasse nur ein Objekt gleichzeitig gibt, werde ich dann wohl doch auslagern müssen.

    Danke aber für die Hilfe,

    balta



  • balta schrieb:

    meintest du das mit fehlendem this??

    Das bedeutet, dass du keine Instanz der Klasse beim Funktionsaufruf bekommst, d.h. du hast keine Chance auf irgendwelche Member zuzugreifen.

    balta schrieb:

    das mit dem singleton scheint ja komplizierter zu sein. Auch wenn es von dieser Klasse nur ein Objekt gleichzeitig gibt...

    Ein normales Singleton is net schwer: Private Konstruktoren/Destruktor, eine statische Funktion ala "klasse &getInstance()" mit der sich die einzige Instanz herkriegen lässt und dann noch die Instanz als statischen Member (Die Instanz musst dann in der Sourcecodedatei noch definieren).




Anmelden zum Antworten