E2034 Impossible de convertir 'type1' en 'type2' (C++)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Erreurs et avertissements du compilateur (C++) - Index

Une affectation, une initialisation ou une expression requiert la conversion de type spécifiée, mais cette conversion n'est pas autorisée.

En C++, le compilateur ne convertit un pointeur de fonction que si la signature des fonctions est identique. La signature désigne les arguments et le type de retour de la fonction. Par exemple :

myex( int );
typedef int ( *ffp )( float );
test()
{
   ffp fp = myex; //erreur
}

Etant donné que myex accepte un entier comme argument et que fp est un pointeur sur une fonction acceptant une valeur flottante comme argument, le compilateur ne convertit pas la fonction.

Si vous souhaitez toutefois effectuer la conversion, vous devez réaliser un transtypage :

myex( int );
typedef int ( *ffp )( float );
test()
{
   ffp fp = (ffp)myex;  //ok
}