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
。私は何を間違っているのですか、そしてそれをどのように修正できますか?