fujiokaです。
C言語での拡張ライブラリの書き方を勉強中なのですが、
継承がどうしてもわからないので、教えて頂けませんでしょうか。
#include <ruby.h>
VALUE rb_cPerson;
typedef struct {
char name[256];
char family[256];
} Person;
VALUE Person_alloc(VALUE klass){
Person *ptr;
return Data_Make_Struct(klass, Person, 0, -1, ptr);
}
VALUE Person_view(VALUE self){
Person *ptr;
Data_Get_Struct(self,Person,ptr);
printf("%s\n",ptr->name);
return(self);
}
VALUE Person_initialize(VALUE self,VALUE name,VALUE family){
Person *ptr;
/* check type*/
Check_Type(name,T_STRING);
Check_Type(family,T_STRING);
Data_Get_Struct(self,Person,ptr);
strcpy(ptr->name,StringValuePtr(name));
strcpy(ptr->family,StringValuePtr(family));
return(Qnil);
}
void Init_Jikken(VALUE val){
rb_cPerson = rb_define_class("Person", rb_cArray);
rb_define_alloc_func(rb_cPerson, Person_alloc);
rb_define_private_method(rb_cPerson, "initialize", Person_initialize, 2);
rb_define_method(rb_cPerson, "view", Person_view, 0);
}
このPersonクラスはArrayを継承したいのですが、
require 'Jikken'
jikken=Person.new("henoheno","moheji")
jikken.push("hoge")
を実行すると
fujioka@vmmain:~/rap/Jikken$ ruby jikken.rb
jikken.rb:24: [BUG] Segmentation fault
ruby 1.8.2 (2005-04-11) [i386-linux]
アボートしました
と出てしまいます。このソースを参考にと言うことでも構いませんので、
教えて頂けませんでしょうか。