C++ Lua:加载第二个字符串后无法获取字段;

C++ Lua:加载第二个字符串后无法获取字段;,c++,lua,luajit,C++,Lua,Luajit,下午好, 我正在研究一个Lua/C++应用程序,从这个过程中我需要LUA递归地调用其他的LUA代码,例如:C++调用LUA函数,Lua函数调用另一个LUA函数,该函数是用在第一个Lua函数的开始运行的注册C函数加载的;p> 以下是我将遵循的步骤: lua_State* state = luaL_newstate(); luaL_openlibs(state); lua_register(state, "secondLua", secondLua); lua_get

下午好, 我正在研究一个Lua/C++应用程序,从这个过程中我需要LUA递归地调用其他的LUA代码,例如:C++调用LUA函数,Lua函数调用另一个LUA函数,该函数是用在第一个Lua函数的开始运行的注册C函数加载的;p> 以下是我将遵循的步骤:

    lua_State* state = luaL_newstate();
    luaL_openlibs(state);
    lua_register(state, "secondLua", secondLua);
    lua_getfield( _luaState, LUA_GLOBALSINDEX, "init" );
    lua_pcall( _luaState, 0, 0, 0 );

    int secondLua(lua_State* state){
    char* myString[128] = "function init2()\n io.write(\"hello\")\n end";
    luaL_loadstring(pLuaState, myString);
    lua_getfield(pLuaState,LUA_GLOBALSINDEX, "init2"); // function init2 declared on myString
    lua_pcall(pLuaState, 0, LUA_MULTRET, 0);
//getting "attempt to call a nil value" here

    return 0;  
    }
非常感谢您的帮助,第二,我想知道是否有一种方法可以将第二个函数命名为“init”以及第一个函数

PS:我在LUAJIT上使用C++14和Lua5.1,我不能使用lua的dofile

lua_loadstring()编译提供的源代码并将lua块放在堆栈上。但是它不会执行它,所以当您期望时,init2()仍然没有定义。

将lua_loadstring()替换为luaL_dostring(),以实际运行该块并定义新的lua函数。或者在lua_loadstring()之后调用lua_pcall()。实际上,LualuoDistRung()确实是这样的,LuaYouListSrand(),后面跟着LuaAuPCARAL(),

与你的实际问题无关,但是你考虑过使用包装库吗?比如为什么这个标签是<代码> [C] < /Cord>?@ KemyLand,因为这是Lua的C++ API。对
lua\u getfield
的第二次调用缺少参数。