Multiple constructors in Ruby C++ extension

Viewed 394

I build the ruby C++ extension. i have multiple constructors in C++. so i did create several initialize methods. but it show an error. Thank you.

here is my code.

C++ header file

  #ifndef CIRCLE_H_
  #define CIRCLE_H_

class Circle {
    public:
        Circle():_radius(0.0) {}
        Circle(float radius):_radius(radius) {}
        float getArea() { return 3.14159 * _radius * _radius; }
        void setRadius(float radius) { _radius=radius; }
    private:
        float _radius;
};

#endif /* CIRCLE_H_ */

cpp file

   #include<ruby.h>
   #include"Circle.h"
   #include<iostream>

   using namespace std;

   VALUE classOb;

   template<class Obtype> void delete_objects(Obtype *ptr){//   free pointer
     delete ptr;
   }

   template<class Obtype> VALUE wrap_pointer(VALUE klass,Obtype *ptr){ //wrap c++ object to ruby object
       return Data_Wrap_Struct(klass,0,delete_objects,ptr);
   }

   VALUE alloc_ob(VALUE self){
       return wrap_pointer<Circle>(self,new Circle());//  add c++ object to ruby     object
   }

   VALUE method_initialize(VALUE self,VALUE y){
       double x= NUM2DBL(y);
       Circle *c;
       Data_Get_Struct(self,Circle,c);
       c->setRadius(x);
       return self;
   }

   VALUE method_Initialize(VALUE self){
       .......
       return ;
    }
    ............

    extern "C" void Init_Test(){
    VALUE lemon = rb_define_module("Test");
    classOb= rb_define_class_under(lemon,"Circle",rb_cObject);
    rb_define_alloc_func(classOb,alloc_ob);
    rb_define_method(classOb, "initialize", (VALUE(*)(ANYARGS))method_initialize,0);
        rb_define_method(classOb, "initialize", (VALUE(*)(ANYARGS))method_initialize,1);
    rb_define_method(classOb, "test1", (VALUE(*)(ANYARGS))method_initialize,0);
    }

extconf.rb

   require 'mkmf'
   have_library( 'stdc++' );
   $CFLAGS << " -Wall"
   create_makefile( 'Test' );   

test.rb

  require 'rubygems'
  require '/home/kelum/workspace/Test3/circle/Test'
  include Test
  obj=Circle.new
  obj2=Circle.new(7.1)

errors occur

  Circle.cpp:47:61: error: overloaded function with no contextual type information
  Circle.cpp:48:61: error: overloaded function with no contextual type information

what is the problem?

2 Answers
Related