C++ではこの辺りの型チェックがCよりもきついので明示的にキャストしてやらねばなりません。

rb_define_module_function(mTmp, "some_func",
reinterpret_cast<VALUE(*)(...)>(Some_func), 0);

としてください。



2013/7/11 Ueki,Hikonuki <ueki.hikonuki / jcom.home.ne.jp>

> はじめまして、植木です。
>
> Rubyから呼ぶべき関数がC++のライブラリなので、いろいろ調べたところ extconf.rbで
>
> require 'mkmf'
> $LIBS << " -lstdc++ -lc"
> $CC == "g++"
> $CXX == $CC
>
> などとやると、一応g++でコンパイルしてくれるようになりました
> (これが正しい対処かはやや疑問ですが)。
>
> しかし、makeすると
>
> error: invalid conversion from 'VALUE (*)(VALUE)' to 'VALUE (*)(...)'
>
> となってしまいます。該当箇所は
>
> rb_define_module_function(mTmp, "some_func", Some_func, 0);
>
> という行です。Some_funcの定義は
>
>
> static VALUE Some_func(VALUE obj)
> {
>   .....
>
> のようなかんじです。Cであれば問題ない記述だと思うのですが、どうすればいいでしょうか?
>
> rubyは1.8.5です。
>
> 以上よろしくお願いします。
>
>


-- 
Yuki Sonoda (Yugui)
yugui / yugui.jp
http://yugui.jp