Pregunta

tiene problemas para pasar una función como parámetro de otra función ...

ERROR: Error 1 error C2664: 'envoltorio' : no se puede convertir el parámetro 1 de '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 ;

}
¿Fue útil?

Solución

Estás pasando el resultado de una llamada de función inc(3) a wrapper, NO un puntero de función como se espera.

a = wrapper(3, &inc) ;

Otros consejos

Su llamada pasa un número entero, el valor de retorno de llamar a inc(3), es decir, 4.

Eso no es un puntero de función.

Quizás quisiste decir:

a = wrapper(3, inc);

Esto funcionaría y asignaría un valor al llamar a int con el parámetro 3.

La línea:

 a = wrapper(  3, inc( 3 )  ) ;

es efectivamente:

a = wrapper(3, 4);

Creo que te refieres a:

a = wrapper(3, inc);

Esto pasa un puntero a la función inc () como segundo argumento para wrapper ().

Tal como está ahora, wrapper toma un int y un puntero a una función que toma un int y devuelve un int.Estás intentando pasarle un int y un int, porque en lugar de pasar el un puntero a la función , estás llamando a la función y pasando el valor de retorno (unint).Para que su código funcione como (creo) que espera, cambie su llamada a wrapper a esto:

a = wrapper(3, &inc);

Tuve este error en mi programa:

error C2664: 'glutSpecialFunc' : cannot convert parameter 1 from 'void (__cdecl *)(void)' to 'void (__cdecl *)(int,int,int)'

porque escribí la definición del método más tarde que el método principal. cuando corté el método principal y lo pegué después de la definición de función, el error se eliminó.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top