Fehler C2664: Parameter 1 kann nicht von 'int' in 'int (__cdecl *) (int)' konvertiert werden.

StackOverflow https://stackoverflow.com/questions/6332078

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 ;

}

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top