begin process at 2012 05 29 06:21:59
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Linux

 > 

OpenGL

 > 

error C3867 : pointeur vers une fonction membre


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

error C3867 : pointeur vers une fonction membre

samedi 27 décembre 2008 à 12:10:49 | error C3867 : pointeur vers une fonction membre

Zeplayerfou

Bonjour, Je fais une petite application utilisant ODE, et je cherche à simuler la friction atmosphérique pour freiner les mouvements de type "rolling" Je dispose d'une class ODESphere qui hérite d'une class abstraite ODEObject, qui me permet de créer facilement à la fois le body et la geom de mon objet, et qui est aussi capable d'en effectuer le rendu. Afin de simuler la friction atmosphérique, je fais appelle au callback dBodySetMovedCallback(dBodyID, void(*)(dBodyID) ) tout en déclarant ma fonction de callback. Je me retrouve donc avec ceci : ODESphere::ODESphere() { // du code... dBodySetMovedCallback(body,movedCallback); } void ODESphere::movedCallback(dBodyID _body) { // du code... } Et en tentant de compiler je me retrouve avec ce message d'erreur : 1>.\ODESphere.cpp(17) : error C3867: &'ODESphere::movedCallback' : liste d'arguments manquante dans l'appel de fonction ; utilisez 'ODESphere::movedCallback' pour créer un pointeur vers membre Ce que je ne comprends pas, c'est que j'ai essayé de faire ça dans mon main.cpp, et là ça fonctionne à merveille. Comme me le dit le compilo, j'imagine qu'il y a une subtilité qui m'échappe pour créer des pointeurs vers des fonctions membres, mais je ne vois pas du tout laquelle
samedi 27 décembre 2008 à 12:15:05 | Re : error C3867 : pointeur vers une fonction membre

Zeplayerfou

hmm ça se voit tant que ça que c'est la première fois que je poste sur ce site ?

Comment ça se fait que mes retours chariots n'apparaissent pas ?
samedi 27 décembre 2008 à 12:17:52 | Re : error C3867 : pointeur vers une fonction membre

Zeplayerfou

Bonjour, Je fais une petite application utilisant ODE, et je cherche à simuler la friction atmosphérique pour freiner les mouvements de type "rolling".

Je dispose d'une class ODESphere qui hérite d'une class abstraite ODEObject, qui me permet de créer facilement à la fois le body et la geom de mon objet, et qui est aussi capable d'en effectuer le rendu.

Afin de simuler la friction atmosphérique, je fais appelle au callback dBodySetMovedCallback(dBodyID, void(*)(dBodyID) )
tout en déclarant ma fonction de callback.

Je me retrouve donc avec ceci :
ODESphere::ODESphere()
{
     // du code...
     dBodySetMovedCallback(body,movedCallback);
}

void ODESphere::movedCallback(dBodyID _body)
{
    // du code...
}

Et en tentant de compiler je me retrouve avec ce message d'erreur :
1>.\ODESphere.cpp(17) : error C3867: &'ODESphere::movedCallback' : liste d'arguments manquante dans l'appel de fonction ; utilisez 'ODESphere::movedCallback' pour créer un pointeur vers membre.

Ce que je ne comprends pas, c'est que j'ai essayé de faire ça dans mon main.cpp, et là ça fonctionne à merveille.
Comme me le dit le compilo, j'imagine qu'il y a une subtilité qui m'échappe pour créer des pointeurs vers des fonctions membres, mais je ne vois pas du tout laquelle.


voilà désolé pour le triple post, mais jusqu'à présent je n'ai pas trouver s'il était possible d'éditer ses propres messages, mais bon avec des sauts de ligne c'est bcp plus clair !

Je viens de remarquer aussi que le sujet se trouve sous linux...mais en fait pas vraiment puisque je travaille sous VS2005..mais bon c'est de l'openGL..
samedi 27 décembre 2008 à 17:57:29 | Re : error C3867 : pointeur vers une fonction membre

rt15

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
Bienvenue,

Effectivement, il n'est pas forcément évident de coller (Ou de copier) des codes sur ce site. Et on ne peut pas éditer ses messages.

Concernant ton problème, le message d'erreur est (presque) un modèle de limpidité... Qui plus est, il est français. Encore que la traduction est peut être pas top.

Là il te dit que soit :
1) Il te manque les arguments dans ton appel de fonction
2) Tu as mal écrit ton pointeur sur le membre, et qu'il faudrait que tu l'écrive comme ça : 'ODESphere::movedCallback'.

Le "soit" n'est cependant il est vrai pas très clair dans ce message d'erreur.

Dans ton cas, vu le nom de la fonction avec callback dedans, tu es manifestement dans le deuxième cas. Il faut donc que tu écrive ton pointeur comme le compilo te le demande.

Par contre, je ne sais pas si la fonction que tu appelles attend un pointeur sur une méthode. Je crois qu'il faut que tu lui donne un pointeur sur une fonction classique. Comme ici.

Il faudra donc peut être que tu oublies un peu de C++ deux minutes pour revenir au C.
samedi 27 décembre 2008 à 19:09:59 | Re : error C3867 : pointeur vers une fonction membre

Zeplayerfou

J'ai tenté les 2 méthodes :
si je donne les arguments, l'erreur provient d'un problème de conversion (impossible de convertir le 2 arguments de 'void' en void (__cdecl *)(dBodyID) )

Ensuite ecrire ODESphere::movedCallback ne change strictement rien.


Et en effet, utiliser une fonction classique est beaucoup plus efficace qu'une fonction membre !
Ensuite ayant très peu fait de C jusqu'à maintenant, il est vrai que j'ai peut-être chopper de mauvaises habitudes, comme vouloir mettre toutes les fonctions comme membres de ma classe ^^'.

En tout cas merci beaucoup!


Cette discussion est classée dans : fonction, error, odesphere, movedcallback, c3867


Répondre à ce message

Sujets en rapport avec ce message

Probleme de syntaxe dans un fonction [ par fjC ] Voilà je debute en C je pense que l'erreur doit etre toute bete mais je n'arrive vraiment pas à la trouver le compilateur me trouve les 4 erreures sui pb fonction collision [ par mat74 ] salut a tsjai 1 pb (logique) jutilise Allegro et VC++ v6.0jai essayer de faire 1 fonction de collision des sprites et elle marchai mai elle avai aucun error C2660: la fonction ne prend pas 0 argument [ par wallie0703 ] Bonjour j'ai cette error C2660: 'C843_qPOS' : la fonction ne prend pas 0 argumentVoici la partie ou cela se passe : int PIPCIZStage::GetPositionUm(dou utlisation de la classe string [ par borgeomi ] borgeomibonjouuuuuuur !!!!!nouveau programmeur en C ++ ( mais vieux en cobol )sous visual C++création d'une fonction qui enlève les espaces de début e Re-utiliser une variable [ par squall51 ] J'essaie de créer un programme.J'ai du le diviser en plusieurs fonction.J'aimerai savoir si il est possible d'utiliser une variable definie dans un fo Affichage dans une editbox sans SetDlgItemText() [ par slashparof ] Cher programmeurs,Malgré beaucoup d'essais, je n'arrive pas à afficher du texte dans une EditBox avec la fonction SetDlgItemText(). VC++ compile mon Au secour ! [ par slashparof ] Au secour! Je ne comprend vraiment pas le problème visual studio me compile cette fonction correctement, mais mon programme cause une erreur quand j'a Fonction modifiable [ par MemepaMal ] est-ce-que c'est possible de changer une fonction marhématique (par exemple x²+3x) en une autre (log 5x)sans devoir modifier le code??? PROBLEME pour retourner un char* a partir d'un fichier [ par kobee12 ] Voici ma fonction. Elle prend en argument un caractere. A partir de ce caractere, elle renvoie la chaine qui lui est associe.Par exemple:"fichier_lang PROBLEME pour retourner un char* apres recuperation d'une chaine(sscanf) d'un fichier [ par kobee12 ] Voici ma fonction. Elle prend en argument un caractere. A partir de ce caractere, elle renvoie la chaine qui lui est associe.Par exemple:"fichier_lang


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales