Zeiger auf Funktionen als Funktionsparameter

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

schiese

Erfahrenes Mitglied
Hallo,

ich habe mir gerade die Funktion qsort aus cstdlib angeschaut. Beim Schreiben einer eigenen Funktion, die einen Zeiger auf eine Funktion als Parameter erwartet, ist mir folgendes aufgefallen (ich habe die Definition von sqort als Vorlage benutzt).
Auf den beiden Seiten, die ich tzum Nachschlagen nutze, sieht die Definition unterschiedlich aus:
std::qsort - cppreference.com
qsort - C++ Reference

Ich habe erst die Deklaration der Seite cppreference benutzt und mein Programm kompilierte nicht.
ZaF.png
C++:
#include <iostream>

int add10(int summand) {
    int wert = 10 + summand;
    return wert;
}

int func(int zahl, int(int)* f) { // Fehler. So würde ich es laut der Deklaration von cppreference.com deuten
    return (*f)(zahl);
}

int main() {

    int zahl = 12;
    std::cout << func(zahl, add10);

}

C++:
#include <iostream>

int add10(int summand) {
    int wert = 10 + summand;
    return wert;
}

int func(int zahl, int(*f)(int)) {
    return (*f)(zahl);
}

int main() {

    int zahl = 12;
    std::cout << func(zahl, add10);

}

Wo ist mein Fehler, wenn ich die Methodendeklaration so wie auf der Seite cppreference.com schreibe? Deren Code wird ja richtig sein.

Viele grüße
schiese
 
So muss es aussehen:
C++:
#include <iostream>
int add10(int summand) {
    int wert = 10 + summand;
    return wert;
}
int func(int zahl, int (*f)(int)) { // Fehler. So würde ich es laut der Deklaration von cppreference.com deuten
    return (*f)(zahl);
}
int main() {
    int zahl = 12;
    std::cout << func(zahl, add10);
}
Siehe Ideone.com.

Hier ist die korrekte Syntax:
C++:
void qsort (void* base, size_t num, size_t size,            int (*compar)(const void*,const void*));

Ich weiß nicht, was cppreference genau darstellt.

Siehe auch C Clockwise/Spiral Rule.
Auch relevant: cdecl: C gibberish ↔ English. Da kannst du etwa den Funktionspointertypen eingeben und eine englische Übersetzung bekommen.
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…
Zurück