Ошибка подтверждения LuaBridge

Я изучал некоторые руководства по luabridge для доступа к c ++ из lua, но столкнулся с проблемой, на которую не могу найти ответ, выполнив поиск в Google.

Я установил пример программы для запуска скрипта и доступа к lua ​​из c ++, который работает отлично. Но когда я пытаюсь зарегистрировать функцию в глобальном пространстве имен, она жалуется во время выполнения — компилируется просто отлично.

#include <iostream>
#include <string>

#include "../LuaBridge/LuaBridge.h"
using namespace luabridge;

void printMessage(const std::string& s) {
std::cout << s << std::endl;
}

int main() {
lua_State* L = luaL_newstate();

getGlobalNamespace(L).addFunction("printMessage", printMessage);

luaL_dofile(L, "script.lua");
luaL_openlibs(L);
lua_pcall(L, 0, 0, 0);
LuaRef s = getGlobal(L, "testString");
LuaRef n = getGlobal(L, "number");
std::string luaString = s.cast<std::string>();
int answer = n.cast<int>();
std::cout << luaString << std::endl;
std::cout << "And here's our number:" << answer << std::endl;
}

Итак, этот код с вызов addFunction дает мне эту ошибку

Lua: /home/linuxxon/Programming/kingdoms-online/Script/Lua/../LuaBridge/detail/Namespace.h:1080: luabridge::Namespace& luabridge::Namespace::addFunction(const char*, FP) [with FP = void (*)(const std::basic_string<char>&)]: Assertion `(lua_type(L, (-1)) == 5)' failed.

С помощью вызова addFunction я получаю то, что ожидается от скрипта.

Может быть, есть что-то очевидное, что я пропустил, так как я не нашел ничего подобного?

Буду очень признателен за любую помощь!

0

Решение

Проблема заключалась в том, что

luaL_openlibs(L);

было после того, как скрипт был запущен. Проблема была в уроке, которому я следовал, я столкнулся с тем же самым раньше, в начале своих попыток с lua.

Все это прекрасно работает, вызывая его после создания нового состояния lua.

1

Другие решения


По вопросам рекламы [email protected]