【发布时间】:2012-04-18 13:39:37
【问题描述】:
我正在为 Ruby 编写 C++ 扩展,并尝试从 Ruby 数组对象中提取 Ruby 字符串对象,并将其转换为 C/C++ 字符串对象。
我有 foo.cpp:
#include <iostream>
#include <ruby.h>
VALUE bar_func(VALUE self, VALUE ary){
std::string s = StringValuePtr(rb_ary_entry(ary, 0));
...
return 0;
}
extern "C" VALUE rb_cFoo;
VALUE rb_cFoo;
extern "C" void Init_foo(){
rb_cFoo = rb_define_class("Foo", rb_cObject);
rb_define_singleton_method(rb_cFoo, "bar", RUBY_METHOD_FUNC(bar_func), 1);
}
和test.rb:
require "foo"
Foo.bar(["Hello World!"])
当我尝试编译 foo.cpp 时,编译器返回一个错误,提示类似 “单个术语和操作数需要左侧值”(不是确切的消息。翻译自给出的错误消息另一种自然语言)。这是关于我对StringValuePtr 的使用。我做错了什么,如何解决?
【问题讨论】:
-
引用运算符
&应该使用左值,即不能应用于常量。 -
@kirilloid 有没有办法修复代码?
标签: c++ ruby ruby-c-extension