Bon, le contexte : j'essaye de faire une extension pour ruby, mais au lieu de la faire en C je dois la faire en C++.
Le fichier ressemble a ca :
Code :
- #include "ruby.h"
- static VALUE simple_run(VALUE obj)
- {
- return Qtrue;
- }
- void Init_simple(void)
- {
- VALUE klass = rb_define_class("Simple", rb_cObject);
- rb_define_method(klass, "run", simple_run, 0);
- }
|
Ca me sert juste a tester. En fait je défini une classe Simple avec la méthode run qui renvoie vrai.
Si je mets ce code dans un fichier avec un extension .c et que l'extension se compile avec gcc, ca passe sans probleme.
Par contre, si je le mets dans un .cc ou equivalent et que je le compile avec g++ j'ai une sale erreur :
simpe.cc: In function `void Init_simple()':
simpe.cc:11: ANSI C++ prohibits conversion from `(long unsigned int)' to `(...)'
En fait, la fonction rb_define_method prends comme 3eme parametre
un pointeur de fonction, dont le prototype doit utiliser une ellipse (c'est comme ca que je comprends le ... dans l'erreur).
La question, c'est comment faire en sorte que ce code soit accepté par un compilateur C++, quelle est l'erreur en fait.
Edit: formattage
Message édité par lorill le 28-07-2002 à 23:17:54