Ich verwende in einem Programm die scandir Funktion. Allerdings sind mir die Sortiermöglichkeiten da etwas zu eingeschränkt, weshalb ich die entsprechenden Funktionen aus dem FLTK-Toolkit verwenden möchte (z.B. fl_casealphasort() oder fl_casenumericsort()).
Auf meinem aktuellen PC funktioniert das auch. Aber auf einem etwas älteren 32-Bit PC bekomme ich folgende Fehlermeldung:
DirTree.cpp: In member function »void DirTree::init()«: DirTree.cpp:580: Fehler: ungültige Umwandlung von »int (*)(const dirent**, const dirent**)« in »int (*)(const void*, const void*)« DirTree.cpp:580: Fehler: Argument 4 von »int scandir(const char*, dirent***, int (*)(const dirent*), int (*)(const void*, const void*))« wird initialisiert
Man sieht, das const void* anstelle der angebotenen const dirent* erwartet werden. Ich habe es bisher nicht geschafft, eine entsprechende Typumwandlung zu erzwingen. Als Komplikation kommt noch hinzu, dass die Funktionen austauschbar sein sollen. Ich muss die Adressen der Funktionen also irgendwie nach sort_func bringen ohne dass der Compiler meckert.
1 2 3 4 | int (*sort_func)(const struct dirent**, const struct dirent** ); ... if((num_entries=scandir( wd, &namelist, &dir_sel, *sort_func )) > 0 ) { ... |
Was muss ich machen, damit der Code auf beiden Rechnern übersetzt werden kann. Optimal wäre natürlich, wenn man das auch noch automatisieren könnte.
p.s. Ich könnte natürlich auch scandir() durch fl_filename_list() ersetzen, dann hätte ich das Problem nicht. Aber dieser Funktion fehlt die Möglichkeit eine Selekt Funktion mitzugeben, und die brauche ich, wenn ich nur Verzeichnisse haben will.
Edit: Version korrigiert.