Tim Hunter
8/21/2007 4:09:00 PM
unbewusst wrote:
> i did a first try calling rb_class_new_instance with variable args
> length :
>
> rosxutils.c: In function m_rfile_wo:
> rosxutils.c:1870: error: parse error before [ token
>
> 1867 VALUE m_rfile_wo ( VALUE self, VALUE file, VALUE options )
> 1868 {
> 1869 char *cfile = StringValuePtr ( file );
> 1870 VALUE[2] args;
> 1871 //VALUE args[2];
> 1872 args[0] = file;
> 1873 args[1] = options;
> 1874 return rb_class_new_instance ( 2, &args, rb_path2class
> ( "RFile" ) );
> 1875 }
>
> HERE i don't see where is the parse error ???
"VALUE[2] args;" is not valid C.
You need to use VALUE args[2];
>
>
> rosxutils.c: In function m_rfile_wo:
> rosxutils.c:1874: warning: passing argument 2 of rb_class_new_instance
> from incompatible pointer type
>
> 1867 VALUE m_rfile_wo ( VALUE self, VALUE file, VALUE options )
> 1868 {
> 1869 char *cfile = StringValuePtr ( file );
> 1870 //VALUE [2] args;
> 1871 VALUE args[2];
> 1872 args[0] = file;
> 1873 args[1] = options;
> 1874 return rb_class_new_instance ( 2, &args, rb_path2class
> ( "RFile" ) );
> 1875 }
>
> AND HERE why the pointer is incompatible, because of the "&" ???
Yes. In this context, "args" is a pointer to a VALUE, or "VALUE *".
&args is then a pointer to a pointer to a VALUE, or "VALUE **".
>
> Yvon
>