Luabind编译时错误无法推断模板参数

时间:2014-09-25 15:05:46

标签: c++ visual-studio-2012 lua luabind

我得到了一个我不理解的编译时错误列表。我正在使用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小部件的数组的表。

1 个答案:

答案 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);