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 ;

}
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top