Bonjour,

Une référence de fonction dans mon code C++ réfère une fonction d'une bibliothèque écrite en C. Voici la déclaration du constructeur qui reçoit en paramètre la référence de fonction :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
VertexBufferObject(  int dataSize,
                           GLenum  accessMode,
                           void (&glPointer)(GLint, GLenum, GLsizei, const GLvoid*),
                           GLint numCoord );
Lorsque j'instancie la classe VertexBufferObject comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
// Instanciation dans une liste d'initialisation
m_posVBO(m_POS_DATA_SIZE, GL_STREAM_DRAW, glVertexPointer, 2),
J'obtiens à la compilation le type d'erreur suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
error: no matching function for call to ...
Si je définis une fonction dans le fichier VertexBufferObject.cpp ayant strictement le même type de retour et les même paramètres comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
void func(GLint, GLenum, GLsizei, const GLvoid*) {}
qui remplace glVertexPointer, alors la compilation n'échoue pas.

Une autre manière plus simple expliquant le problème. Ce code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
void (*f)(GLint, GLenum, GLsizei, const GLvoid*);
 
f = &glVertexPointer;
donne l'erreur de compilation suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
error: invalid conversion from void (*)(GLint, GLenum, GLsizei, const GLvoid*) 
                            to void (*)(GLint, GLenum, GLsizei, const GLvoid*)
J'ai trouvé une solution qui est la suivante. J'ai crée des fonctions static inline dans ma classe VertexBufferObject qui enveloppe les fonctions glXXXXPointer que je souhaite employer. Y'a t'il une solution plus satisfaisante ?

Merci pour votre intêret à la question.