我得到了一个我不理解的编译时错误列表。我正在使用sourceforge的版本0.9.1的luabind库,我正在尝试从MyGUI绑定函数,我使用的是Visual Studio 2012和Lua 5.1。尽管看起来源于其他文件,但在编译下面的cpp代码期间会出现错误。这些错误让我觉得我没有在某处正确定义签名,但是我的IntelliSense并没有表明任何这样的问题。
有问题的代码:
LuaMachine.cpp(Stackoverflow抱怨体长,所以我把它放在pastebin上)
给出的错误:
Error 4 error C2780: 'void luabind::detail::value_wrapper_converter<U>::apply(lua_State *,const T &)' : expects 2 arguments - 3 provided c:\users\jake kiesel\space-junk\c++ project\3rdpartycode\include\luabind\detail\call.hpp 293 1 Space Junk
Error 3 error C2784: 'int luabind::detail::value_wrapper_converter<U>::match(lua_State *,luabind::detail::by_const_reference<T>,int)' : could not deduce template argument for 'luabind::detail::by_const_reference<T>' from 'luabind::detail::by_reference<T>' c:\users\jake kiesel\space-junk\c++ project\3rdpartycode\include\boost\preprocessor\iteration\detail\local.hpp 34 1 Space Junk
Error 2 error C2784: 'int luabind::detail::value_wrapper_converter<U>::match(lua_State *,luabind::detail::by_value<T>,int)' : could not deduce template argument for 'luabind::detail::by_value<T>' from 'luabind::detail::by_reference<T>' c:\users\jake kiesel\space-junk\c++ project\3rdpartycode\include\boost\preprocessor\iteration\detail\local.hpp 34 1 Space Junk
Error 6 error C2784: 'T luabind::detail::value_wrapper_converter<U>::apply(lua_State *,luabind::detail::by_const_reference<T>,int)' : could not deduce template argument for 'luabind::detail::by_const_reference<T>' from 'luabind::detail::by_reference<T>' c:\users\jake kiesel\space-junk\c++ project\3rdpartycode\include\luabind\detail\call.hpp 293 1 Space Junk
Error 5 error C2784: 'T luabind::detail::value_wrapper_converter<U>::apply(lua_State *,luabind::detail::by_value<T>,int)' : could not deduce template argument for 'luabind::detail::by_value<T>' from 'luabind::detail::by_reference<T>' c:\users\jake kiesel\space-junk\c++ project\3rdpartycode\include\luabind\detail\call.hpp 293 1 Space Junk
编辑:
通过进一步研究,我发现以下是触发这些错误的问题行。这些行位于wrapGuiManager函数中。
luabind :: def(“destroyWidgets”,&amp; MyGUIManager :: destroyWidgets)
luabind :: def(“unloadLayout”,&amp; MyGUIManager :: unloadLayout),
这些是这些函数的函数声明:
void unloadLayout(luabind :: object&amp; table);
void destroyWidgets(luabind :: object&amp; table);
这两个函数都是独一无二的,因为它们采用了luabind :: object&amp;参数。他们应该能够从Lua中获取一个用作充满MyGUI小部件的数组的表。
答案 0 :(得分:2)
我得到了它的工作! :D问题行是
luabind::def("destroyWidgets", &MyGUIManager::destroyWidgets)
和
luabind::def("unloadLayout", &MyGUIManager::unloadLayout)
这两个函数都花了luabind::object&
,luabind并不想与这些函数合作,而是希望函数在没有引用的情况下使用luabind::object
,而只需要对象本身。所以正确的函数声明将是:
void unloadLayout(luabind::object table);
void destroyWidgets(luabind::object table);