2016-06-13 10 views
-1

Ich habe einen Lua-Interpreter, dass, wenn ich einen Syntaxfehler in meinem Code mache, die zurückgegebene Fehlermeldung einfach attempted to call a string value statt einer sinnvollen Fehlermeldung ist. Zum Beispiel, wenn ich diesen lua-Code ausführen:Beschreibende Fehlermeldungen für Lua-Syntaxfehler

for a= 1,10 
    print(a) 
end 

Anstatt eine sinnvolle 'do' expected near 'print' und eine Zeilennummer Rückkehr wird es nur die Fehler zurück attempted to call a string value.

Meine C++ Code ist folgende:

void LuaInterpreter::run(std::string script) { 
    luaL_openlibs(m_mainState); 

    // Adds all functions for calling in lua code 
    addFunctions(m_mainState); 

    // Loading the script string into lua 
    luaL_loadstring(m_mainState, script.c_str()); 

    // Calls the script 
    int error =lua_pcall(m_mainState, 0, 0, 0); 
    if (error) { 
     std::cout << lua_tostring(m_mainState, -1) << std::endl; 
     lua_pop(m_mainState, 1); 
    } 
} 

Vielen Dank im Voraus!

Antwort

7

Ihr Problem ist, zu ersetzen, dass luaL_loadstring nicht die Zeichenfolge zu laden, da sie nicht gültig Lua-Code ist. Aber du versuchst nie, seinen Rückgabewert zu überprüfen, um das herauszufinden. Und deshalb enden Sie mit dem Versuch, den Kompilierungsfehler auszuführen, der auf den Stapel geschoben wurde, als wäre es eine gültige Lua-Funktion.

Der richtige Weg, um diese Funktion zu verwenden, ist wie folgt:

auto error = luaL_loadstring(m_mainState, script.c_str()); 
if(error) 
{ 
    std::cout << lua_tostring(m_mainState, -1) << std::endl; 
    lua_pop(m_mainState, 1); 
    return; //Perhaps throw or something to signal an error? 
} 
1

Ich konnte das Problem beheben, indem

luaL_loadstring(m_mainState, script.c_str()); 

// Calls the script 
int error =lua_pcall(m_mainState, 0, 0, 0); 

mit dem Code

int error = luaL_dostring(m_mainState, script.c_str()); 
Verwandte Themen