lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On the other hand...

$cfile causes the pkg to essentially include the given file as part of
the package... it ALSO generates a #include in the generated cpp file.

You can also use:

$#include "class1.h"

Which will just cause the #include to be put into the generated cpp.

-Andrew


-----Original Message-----
From: lua-bounces@bazar2.conectiva.com.br
[mailto:lua-bounces@bazar2.conectiva.com.br] On Behalf Of Andrew Yount
Sent: Thursday, June 21, 2007 1:15 PM
To: Lua list
Subject: RE: toLua gives syntax errors

You need to put:

$cfile "class1.h"

...in your PKG file.

-Andrew

-----Original Message-----
From: lua-bounces@bazar2.conectiva.com.br
[mailto:lua-bounces@bazar2.conectiva.com.br] On Behalf Of L-28C
Sent: Wednesday, June 20, 2007 9:23 PM
To: lua@bazar2.conectiva.com.br
Subject: Re: toLua gives syntax errors

Yay, but now it gives me this: (note: I changed the definition of class1

to a void function called 'foo' because class1 crashed with a win32 
exception)

-------------------------
class1_Lua.cpp: In function `int tolua_class1_foo00(lua_State*)':
class1_Lua.cpp:36: error: `foo' was not declared in this scope
class1_Lua.cpp: In function `int tolua_class1_open(lua_State*)':
class1_Lua.cpp:55: error: `CLASS1' was not declared in this scope
-------------------------

But it compiles without errors if I add 'include "class1.h"' to the 
generated CPP file... Must I do that each time? :-/

Thanks!

Ariel Manzur wrote:
> you don't use tolua to generate the pkg file. The pkg file is
> generated by you, that's where you specify the interface you want to
> bind. in this case, you would create 'class.pkg' with something like:
> 
> class Class1 {
>                void AddOne();
> };
> 
> and then run 'tolua++ -o class1_Lua.cpp class1.pkg' (note that the
> output goes to a .cpp file). Then compile the cpp file and link with
> the rest of your stuff.
> 
> Hope that helps..
> 
> Ariel.
> 
> On 6/20/07, L-28C <kixdemp@gmail.com> wrote:
>> Hello everyone!
>>
>> OK, I used these commands:
>>
>> tolua++ class1.h >> class1.pkg
>> tolua++ -o class1_Lua.h class1.pkg
>> g++ main.cpp class1.cpp -ltolua++
>>
>> GCC gives me this BS:
>> -----------------------------
>> In file included from main.cpp:6:
>> class1_Lua.h: In function `int
>> tolua_class1_tolua_class1_open00(lua_State*)':
>> class1_Lua.h:37: error: `tolua_ret' has both `extern' and initializer
>> class1_Lua.h:37: error: expected primary-expression before "extern"
>> class1_Lua.h:37: error: expected `)' before "extern"
>> class1_Lua.h: In function `int
>> tolua_class1_tolua_class1_open01(lua_State*)':
>> class1_Lua.h:90: error: `tolua_ret' has both `extern' and initializer
>> class1_Lua.h:90: error: expected primary-expression before "extern"
>> class1_Lua.h:90: error: expected `)' before "extern"
>> class1_Lua.h: In function `int 
>> tolua_class1_luaopen_class100(lua_State*)':
>> class1_Lua.h:115: error: `tolua_ret' has both `extern' and
initializer
>> class1_Lua.h:115: error: expected primary-expression before "extern"
>> class1_Lua.h:115: error: expected `)' before "extern"
>> -----------------------------
>>
>> Did I do something wrong? Here's my files:
>>
>> main.cpp:
>> -----------------------------
>> #include <tolua++.h>
>>
>> #include "class1_Lua.h"
>>
>> int main()
>> {
>> }
>>
>> -----------------------------
>>
>>
>> class1.cpp:
>> -----------------------------
>> #include "class1.h"
>>
>> void Class1::AddOne()
>> {
>>         ++num;
>> }
>>
>> -----------------------------
>>
>>
>> class1.h:
>> -----------------------------
>> #ifndef CLASS1
>> #define CLASS1
>>
>> class Class1
>> {
>>         int num;
>>
>>         public:
>>                 void AddOne();
>> };
>>
>> #endif // CLASS1
>>
>> -----------------------------
>>
>> And here's the faulty one, class1_Lua.h:
>> -----------------------------
>> /*
>> ** Lua binding: class1
>> ** Generated automatically by tolua++-1.0.92 on 06/20/07 06:04:29.
>> */
>>
>> #ifndef __cplusplus
>> #include "stdlib.h"
>> #endif
>> #include "string.h"
>>
>> #include "tolua++.h"
>>
>> /* Exported function */
>> TOLUA_API int  tolua_class1_open (lua_State* tolua_S);
>>
>>
>> /* function to register type */
>> static void tolua_reg_types (lua_State* tolua_S)
>> {
>> }
>>
>> /* function: tolua_class1_open */
>> #ifndef TOLUA_DISABLE_tolua_class1_tolua_class1_open00
>> static int tolua_class1_tolua_class1_open00(lua_State* tolua_S)
>> {
>> #ifndef TOLUA_RELEASE
>>   tolua_Error tolua_err;
>>   if (
>>       !tolua_isnoobj(tolua_S,1,&tolua_err)
>>   )
>>    goto tolua_lerror;
>>   else
>> #endif
>>   {
>>    lua_State* tolua_S =  tolua_S;
>>    {
>>     TOLUA_API int tolua_ret = (TOLUA_API int)  
>> tolua_class1_open(tolua_S);
>>     tolua_pushnumber(tolua_S,(lua_Number)tolua_ret);
>>    }
>>   }
>>   return 1;
>> #ifndef TOLUA_RELEASE
>>   tolua_lerror:
>>   tolua_error(tolua_S,"#ferror in function
>> 'tolua_class1_open'.",&tolua_err);
>>   return 0;
>> #endif
>> }
>> #endif //#ifndef TOLUA_DISABLE
>>
>> /* function: tolua_reg_types */
>> #ifndef TOLUA_DISABLE_tolua_class1_tolua_reg_types00
>> static int tolua_class1_tolua_reg_types00(lua_State* tolua_S)
>> {
>> #ifndef TOLUA_RELEASE
>>   tolua_Error tolua_err;
>>   if (
>>       !tolua_isnoobj(tolua_S,1,&tolua_err)
>>   )
>>    goto tolua_lerror;
>>   else
>> #endif
>>   {
>>    lua_State* tolua_S =  tolua_S;
>>    {
>>     tolua_reg_types(tolua_S);
>>    }
>>   }
>>   return 0;
>> #ifndef TOLUA_RELEASE
>>   tolua_lerror:
>>   tolua_error(tolua_S,"#ferror in function 
>> 'tolua_reg_types'.",&tolua_err);
>>   return 0;
>> #endif
>> }
>> #endif //#ifndef TOLUA_DISABLE
>>
>> /* function: tolua_class1_open */
>> #ifndef TOLUA_DISABLE_tolua_class1_tolua_class1_open01
>> static int tolua_class1_tolua_class1_open01(lua_State* tolua_S)
>> {
>>   tolua_Error tolua_err;
>>   if (
>>       !tolua_isnoobj(tolua_S,1,&tolua_err)
>>   )
>>    goto tolua_lerror;
>>   else
>>   {
>>    lua_State* tolua_S =  tolua_S;
>>    {
>>     TOLUA_API int tolua_ret = (TOLUA_API int)  
>> tolua_class1_open(tolua_S);
>>     tolua_pushnumber(tolua_S,(lua_Number)tolua_ret);
>>    }
>>   }
>>   return 1;
>> tolua_lerror:
>>   return tolua_class1_tolua_class1_open00(tolua_S);
>> }
>> #endif //#ifndef TOLUA_DISABLE
>>
>> /* function: luaopen_class1 */
>> #ifndef TOLUA_DISABLE_tolua_class1_luaopen_class100
>> static int tolua_class1_luaopen_class100(lua_State* tolua_S)
>> {
>> #ifndef TOLUA_RELEASE
>>   tolua_Error tolua_err;
>>   if (
>>       !tolua_isnoobj(tolua_S,1,&tolua_err)
>>   )
>>    goto tolua_lerror;
>>   else
>> #endif
>>   {
>>    lua_State* tolua_S =  tolua_S;
>>    {
>>     TOLUA_API int tolua_ret = (TOLUA_API int)
luaopen_class1(tolua_S);
>>     tolua_pushnumber(tolua_S,(lua_Number)tolua_ret);
>>    }
>>   }
>>   return 1;
>> #ifndef TOLUA_RELEASE
>>   tolua_lerror:
>>   tolua_error(tolua_S,"#ferror in function 
>> 'luaopen_class1'.",&tolua_err);
>>   return 0;
>> #endif
>> }
>> #endif //#ifndef TOLUA_DISABLE
>>
>> /* Open function */
>> TOLUA_API int tolua_class1_open (lua_State* tolua_S)
>> {
>>   tolua_open(tolua_S);
>>   tolua_reg_types(tolua_S);
>>   tolua_module(tolua_S,NULL,0);
>>   tolua_beginmodule(tolua_S,NULL);
>>
>>
tolua_function(tolua_S,"tolua_class1_open",tolua_class1_tolua_class1_ope
n00); 
>>
>>    
>>
tolua_function(tolua_S,"tolua_reg_types",tolua_class1_tolua_reg_types00)
;
>>
>>
tolua_function(tolua_S,"tolua_class1_open",tolua_class1_tolua_class1_ope
n01); 
>>
>>    
>>
tolua_function(tolua_S,"luaopen_class1",tolua_class1_luaopen_class100);
>>   tolua_endmodule(tolua_S);
>>   return 1;
>> }
>>
>>
>> #if defined(LUA_VERSION_NUM) && LUA_VERSION_NUM >= 501
>>   TOLUA_API int luaopen_class1 (lua_State* tolua_S) {
>>   return tolua_class1_open(tolua_S);
>> };
>> #endif
>> -----------------------------
>>
>> Anyone know what the problem is? Thanks! (And sorry for the long 
>> message...)
>>
>>
>