【问题标题】:Luabind: "No matching overload found, candidates:"Luabind:“没有找到匹配的重载,候选人:”
【发布时间】:2011-05-27 21:37:46
【问题描述】:

注意,我已经阅读并应用了答案:Calling C++ member function from Luabind causes "No matching overload found",但这并没有解决我的问题。

我有一个简单的类,我通过 luabind 向 LUA 公开

这里是绑定代码:

void LogManager::luaBindImpl() const
{
    using namespace luabind;
    lua_State* state(Supervisor::getSingleton().getManager<LuaManager>()->state());

    // LogManager
    module(state)
    [
        class_<LogManager>("LogManager")
        .enum_("LogType")
        [
             value("Info", 1)
            ,value("Warning", 2)
            ,value("Critical", 3)
            ,value("Debug", 4)
        ]
        .def("log", &LogManager::log)
        .def("registerSource", &LogManager::registerSource)
    ];

    // Add to globals
    globals(state)["LogManager"] = this;
};  // eo luaBindImpl

这是我的 LUA:

LogManager.registerSource("lol");

但我得到了标题中提到的错误(这直接来自我的日志文件):

00:00:00:0520- lua:Exception - No matching overload found, candidates:
void registerSource(LogManager&,std::string const&)

我一直为此烦恼不已,看不出我做错了什么。任何人都可以解释一下吗?! :)

【问题讨论】:

    标签: c++ lua luabind


    【解决方案1】:

    在 Lua 部分,你需要使用冒号(:)而不是点:

    LogManager:registerSource("lol");
    

    你确实意识到全局变量LogManager与类LogManager同名;这样您将无法使用枚举常量,例如LogManager.Info 将返回零。

    【讨论】:

    • 感谢您的回复。我将全局修改为LM,并将其更改为LM:registerSource("lol");,但仍然出现相同的错误。
    • @Moo-Juice:好吧,我没有更多的想法。我设法准确地重现了您的问题,使用: 修复了它。我可以建议使用调试信息构建 luabind,在 function::call 中设置断点(应该在 function.cpp 中,大约第 50 行),然后检查 Lua 堆栈以及 luabind 如何查找重载。
    • @sbk,它变得更有趣了。显然我也没有tostringrequire。我得到[string "local tostring = tostring..."]:6: attempt to call local 'tostring' (a nil value)。我以为是内置的?最困惑.... :)
    • Lua 中几乎没有内置任何东西 - 要在您的环境中“导入”标准函数,您必须从 lualib.h 调用一些 luaopen_XXX 函数(例如 luaopen_io() 用于 io 的东西,@ 987654335@ for tostring 等)或致电luaL_openlibs 导入所有内容
    • @sbk,你好。是的,你说得很对。添加这些东西可以解决所有这些问题。有趣的是,globals(state)["LM"] = new LogManager() 按预期工作。它只是出现分配this 失败...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 2021-06-12
    • 2020-07-20
    相关资源
    最近更新 更多