Всякий раз, когда я запускаю программу, она ничего не выводит на консоль.
Это прекрасно работает, если я не использую класс и просто делаю все это в main ().
В тот момент, когда я ставлю это на урок, у меня начинаются проблемы.
Что я делаю неправильно?
using namespace luabridge;
myClass::myClass()
{
lua_State* L = luaL_newstate();
luaL_openlibs(L);
getGlobalNamespace(L).beginClass<myClass>("myClass").addFunction("printMessage", &myClass::printMessage).endClass();
luaL_dofile(L, "test.lua");
lua_pcall(L, 0, 0, 0);
}
void myClass::printMessage(const std::string& s)
{
std::cout << s << std::endl;
}
Мой скрипт lua «test.lua»
я пробовал
c = myClass()
c:printMessage("You can call C++ functions from Lua!")
а также
myClass:printMessage("You can call C++ functions from Lua!")
а также
printMessage("You can call C++ functions from Lua!")
Есть три варианта сделать то, что вы хотите:
Если вы хотите построить myClass
экземпляр в lua, и используйте его как ваш первый пример, вам также нужно экспортировать конструктор после beginClass
:
.addConstructor <void (*) (void)> ()
Построить myClass
экземпляр в C ++, а затем передать его в lua, используя другую функцию. Тогда Луа может получить к нему доступ, например:
myClassInstance:printMessage("Hello")
Делать printMessage
статический и экспортируйте его следующим образом:
.addStaticFunction("printMessage", &myClass::printMessage)
Затем вы можете позвонить в Луа, используя:
myClass.printMessage("Hello")
Обратите внимание на разницу между .
а также :
в звонках. .
доступы как статические и :
доступ как экземпляр.