Fehler C2664: Parameter 1 kann nicht von 'int' in 'int (__cdecl *) (int)' konvertiert werden.
-
27-10-2019 - |
Frage
Probleme beim Übergeben einer Funktion als Parameter einer anderen Funktion ...
FEHLER: Fehler 1 Fehler C2664: 'Wrapper' : kann Parameter 1 nicht von konvertieren 'int' bis 'int (__cdecl *) (int)'
int inc( int n ) { return n + 1 ; } int dec( int n ) { return n - 1 ; } int wrapper( int i, int func(int) ) { return func( i ) ; } int main(){ int a = 0 ; a = wrapper( 3, inc( 3 ) ) ; return 0 ; }
Lösung
Sie übergeben das Ergebnis eines Funktionsaufrufs inc(3)
an wrapper
, NICHT wie erwartet einen Funktionszeiger.
a = wrapper(3, &inc) ;
Andere Tipps
Ihr Anruf übergibt eine Ganzzahl, den Rückgabewert aus dem Aufruf von inc(3)
, d. h. 4.
Das ist kein Funktionszeiger.
Vielleicht meinten Sie:
a = wrapper(3, inc);
Dies würde funktionieren und dem Wert des Aufrufs von int
mit dem Parameter 3
a zuweisen.
Die Zeile:
a = wrapper( 3, inc( 3 ) ) ;
ist effektiv:
a = wrapper(3, 4);
Ich denke du meinst:
a = wrapper(3, inc);
Dies übergibt einen Zeiger auf die Funktion inc () als zweites Argument an wrapper ().
wrapper
verwendet derzeit einen int
und einen Zeiger auf eine Funktion, die einen int
verwendet und einen int
zurückgibt.Sie versuchen, ein int und ein int zu übergeben, da Sie anstelle des Zeigers a auf die Funktion die Funktion aufrufen und den Rückgabewert übergeben (anint
).Damit Ihr Code wie erwartet funktioniert, ändern Sie Ihren Aufruf in wrapper
wie folgt:
a = wrapper(3, &inc);
Ich hatte diesen Fehler in meinem Programm:
error C2664: 'glutSpecialFunc' : cannot convert parameter 1 from 'void (__cdecl *)(void)' to 'void (__cdecl *)(int,int,int)'
weil ich die Methodendefinition später als die Hauptmethode geschrieben hatte. Wenn ich die Hauptmethode ausschneide und später als die Definition der Funktion einfüge, wird der Fehler behoben.