Lua 函数:缺少参数,靠近 <eof>。

我尝试在C++项目中使用Lua。为了执行Lua,我编写了以下代码:

#include <lua.hpp>
...
luaEngine = luaL_newstate();
luaL_openlibs(luaEngine);

register_results(luaEngine); //为在LUA脚本中注册C++对象为元表

lua_pushstring(luaEngine, resultsId.c_str());
lua_setglobal(luaEngine, "resultsId");

lua_pushboolean(luaEngine, needReloadModel);
lua_setglobal(luaEngine, "needReload");
...
e = luaL_loadbuffer(luaEngine, script.c_str(), script.size(), NULL);
if(e != 0)
    // 错误消息
e = lua_pcall(luaEngine, 0, 1, 0);
if(e != 0)
    // 错误消息
...
lua_close(luaEngine);

和以下的lua脚本:

local Res = ResUpdateLUA(resultsId)
if current_result == "Normal" or current_result=='-'  then
    status = 'E'
else
    status = 'O'
end
needReload = Res:setShowAnalyte('2320', status)

但是它没有正常工作,我收到了以下错误消息:

[string "?"]:7: function arguments expected near <eof>

但是当我在lua脚本末尾添加

print(needReload)

就正常工作了。我做错了什么?

点赞
用户107090
用户107090

这个错误消息意味着 Lua 在看到 Res:s 之后,但在看到 ( 之前就已经到达了源代码的末尾。

我怀疑 script.size() 是错误的,但我无法解释为什么添加这行代码会奏效。

2014-12-19 11:34:14
用户4344492
用户4344492

谢谢大家的回答。是的,script.size() 函数有问题,因为当它被替换为 e = luaL_loadbuffer(luaEngine, script.c_str(), strlen(script.c_str()), NULL); 时,它开始工作得很好。对于我愚蠢的问题,我感到抱歉。

2014-12-19 12:40:26