Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;在Ruby C扩展中,指针问题 函数/的函数回调不是编译器期望的。它需要一个如下所示的函数: VALUE my_function(...)_C++_Ruby_Function Pointers_Ruby C Extension - Fatal编程技术网

C++ C++;在Ruby C扩展中,指针问题 函数/的函数回调不是编译器期望的。它需要一个如下所示的函数: VALUE my_function(...)

C++ C++;在Ruby C扩展中,指针问题 函数/的函数回调不是编译器期望的。它需要一个如下所示的函数: VALUE my_function(...),c++,ruby,function-pointers,ruby-c-extension,C++,Ruby,Function Pointers,Ruby C Extension,我不是C/C++专家。Ruby是我的语言。我已经编译了几千行C++,没有问题,但是因为我希望这个特定的扩展在Windows下编译,Rice不是一个选项。 这是因为你提交给RBYRealEXMuleMeLo>函数/的函数回调不是编译器期望的。它需要一个如下所示的函数: VALUE my_function(...) 但你的功能是 VALUE my_function( VALUE self ) 请注意参数列表中的差异 消除错误的一种方法是将参数类型强制转换为rb\u define\u module

我不是C/C++专家。Ruby是我的语言。我已经编译了几千行C++,没有问题,但是因为我希望这个特定的扩展在Windows下编译,Rice不是一个选项。

这是因为你提交给RBYRealEXMuleMeLo>函数/<代码>的函数回调不是编译器期望的。它需要一个如下所示的函数:

VALUE my_function(...)
但你的功能是

VALUE my_function( VALUE self )
请注意参数列表中的差异

消除错误的一种方法是将参数类型强制转换为
rb\u define\u module\u函数
期望的类型:

rb_define_module_function(tosCore, "my_method",
    reinterpret_cast<VALUE(*)(...)>(my_function), 0);
rb_定义模块函数(tosCore,“我的方法”,
重新解释_cast(my_函数),0;

您可以阅读。

看起来rb_define_module_函数需要一个函数指针来重新返回值指针,而不是值,因此将定义更改为“static VALUE*my_function(VALUE self)”,并通过“return&str”完成。(此提示按原样提供等;)您建议的解决方案似乎对我不起作用。然后,我可能又误解了:)无论如何,谢谢你。太好了!简明的解释+解决方案。人们还能要求什么呢?
rb_define_module_function(tosCore, "my_method",
    reinterpret_cast<VALUE(*)(...)>(my_function), 0);