2016-10-12 1 views
1

私はQTアプリでルビーを埋め込み、クラスを作成し、彼の新しい方法Rubyのrb_define_method - 無効な変換

VALUE Base = rb_define_class("Base", NULL); 
VALUE Base_Initialize(VALUE self); 
rb_define_method(Base, "initialize", Base_Initialize, 0); 

を追加しようとするが、Cの拡張機能で

invalid conversion from 'VALUE (*)(VALUE) {aka long unsigned int (*)(long unsigned int)}' to 'VALUE (*)(...) {aka long unsigned int (*)(...)}' [-fpermissive] 

をコンパイルしながら、私はエラーを取得するには、うまく働きました。

+0

おそらく 'Base_Initialize'は' extern "C" 'である必要がありますか? –

+0

'extern" C "'、私が知っているように、C++の拡張ではなく、埋め込まれたルビに必要です。ところで、私はこれを試しました。 – Strelokhalfer

答えて

1

私はreinterpret_cast< VALUE (*) (...) >(BaseItem_Initialize)を追加しています。

VALUE Base = rb_define_class("Base", NULL); 
VALUE Base_Initialize(VALUE self); 
rb_define_method(Base, "initialize", reinterpret_cast< VALUE (*) (...) >(BaseItem_Initialize), 0); 
関連する問題