errore C2664: impossibile convertire il parametro 1 da 'int' a 'int (__cdecl *) (int)'
-
27-10-2019 - |
Domanda
avere qualche problema a passare una funzione come parametro di un'altra funzione ...
ERRORE: Errore 1 errore C2664: "wrapper" : impossibile convertire il parametro 1 da da "int" a "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 ;
}
Soluzione
Stai passando il risultato di una chiamata di funzione inc(3)
a wrapper
, NON un puntatore a funzione come previsto.
a = wrapper(3, &inc) ;
Altri suggerimenti
La tua chiamata sta passando un numero intero, il valore restituito dalla chiamata a inc(3)
, ovvero 4.
Questo non è un puntatore a funzione.
Forse intendevi:
a = wrapper(3, inc);
Questo funzionerebbe e assegnerebbe a al valore della chiamata di int
con il parametro 3
.
La linea:
a = wrapper( 3, inc( 3 ) ) ;
è effettivamente:
a = wrapper(3, 4);
Penso che tu intenda:
a = wrapper(3, inc);
Questo passa un puntatore alla funzione inc () come secondo argomento di wrapper ().
Allo stato attuale, wrapper
accetta un int
e un puntatore a una funzione che accetta un int
e restituisce un int
.Stai tentando di passarle un int e un int, perché invece di passare il un puntatore alla funzione , stai chiamando la funzione e passando il valore di ritorno (unint
).Per far funzionare il tuo codice come (penso) ti aspetti, cambia la tua chiamata a wrapper
in questo:
a = wrapper(3, &inc);
ho riscontrato questo errore nel mio programma:
error C2664: 'glutSpecialFunc' : cannot convert parameter 1 from 'void (__cdecl *)(void)' to 'void (__cdecl *)(int,int,int)'
perché avevo scritto la definizione del metodo più tardi del metodo principale. quando taglio il metodo principale e lo incollo dopo la definizione della funzione, l'errore è stato rimosso.