Re: Trouble binding a class - should be simple
Simon Pickles <[email protected]>
| Newsgroups | gmane.comp.lang.lua.bind.user |
|---|---|
| Message-ID | <[email protected]> |
On 05/05/2011 09:48, feng qiu wrote: > Please try v*:*getX(). > > On 5 May 2011 15:56, Simon Pickles <[email protected] > <mailto:[email protected]>> wrote: > > > Hello, > > I am trying to expose part of the btVector3 class from > BulletPhysics to Lua: > > http://www.bulletphysics.com/Bullet/BulletFull/classbtVector3.html > > My first attempt: > > // C++ > void RegisterPhysicsTypesWithLua( lua_State* lua ) > { > module( lua ) > [ > class_<btVector3>( "btVector3" ) > .def( "getX",&btVector3::getX ) > .def( "getY",&btVector3::getY ) > .def( "getZ",&btVector3::getZ ) > .def( "setX",&btVector3::setX ) > .def( "setY",&btVector3::setY ) > .def( "setZ",&btVector3::setZ ) > ]; > } > > --Lua > print("Testing btVector3 in lua") > v = btVector3() > print("btVector3 created") > > print( "x = " .. v.getX() ) -- should print x = 0.0 > v.setX(99.9) > print( "x = " .. v.getX() ) -- should print x = 99.9 > > ------------------------------------------ > This first attempt produces the error: > "Attempt to call a nil value" > > > So I added a constructor and tried again: > > // C++ > void RegisterPhysicsTypesWithLua( lua_State* lua ) > { > module( lua ) > [ > class_<btVector3>( "btVector3" ) > .def( constructor< float, float, float>() ) > .def( "getX",&btVector3::getX ) > .def( "getY",&btVector3::getY ) > .def( "getZ",&btVector3::getZ ) > .def( "setX",&btVector3::setX ) > .def( "setY",&btVector3::setY ) > .def( "setZ",&btVector3::setZ ) > ]; > } > > --Lua > print("Testing btVector3 in lua") > v = btVector3(1.0,2.0,3.0) > print("btVector3 created") > > print( "x = " .. v.getX() ) -- should print x = 1.0 > v.setX(99.9) > print( "x = " .. v.getX() ) -- should print x = 99.9 > > ------------------------------------------ > This second attempt produces the error: > "No such operator defined" > > > I have double checked that I am definately calling the > RegisterPhysicsTypesWithLua with the correct LuaState. > > I expected this to be reasonably trivial as I have been exposing > my own > classes with ease. This is however, the first time I have tried to > expose a 3rd party class. Am I missing something obvious? > > Thanks very much > > Simon > Well spotted (too used to Python!). The second version works! However doesn't explain why the first version (with default ctor) fails. It never gets to the getX() call: Testing btVector3 in lua Error: Attempt to call a nil value btVector3 does indeed have a default ctor: http://www.bulletphysics.com/Bullet/BulletFull/classbtVector3.html#a82b4c5da54ecd4c91bd9b056dea0d288 Thanks ------------------------------------------------------------------------------ WhatsUp Gold - Download Free Network Management Software The most intuitive, comprehensive, and cost-effective network management toolset available today. Delivers lowest initial acquisition cost and overall TCO of any competing solution. http://p.sf.net/sfu/whatsupgold-sd _______________________________________________ luabind-user mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/luabind-user