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 :
Lorsque j'instancie la classe VertexBufferObject comme ceci :
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 );
J'obtiens à la compilation le type d'erreur suivant :
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),
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
2error: no matching function for call to ...
qui remplace glVertexPointer, alors la compilation n'échoue pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 void func(GLint, GLenum, GLsizei, const GLvoid*) {}
Une autre manière plus simple expliquant le problème. Ce code :
donne l'erreur de compilation suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 void (*f)(GLint, GLenum, GLsizei, const GLvoid*); f = &glVertexPointer;
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 ?
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*)
Merci pour votre intêret à la question.
Partager