2014-01-17 3 views
0

В классе под названием Test_Class, у меня есть функция:Luabind не запускал функцию я определил ей

shoot_a_bullet(int damage) 
{ 
    cout << "runned"; // i had #using namespace std 
} 

Я определил код как следующий

luabind::module(myLuaState)[ 
    luabind::def("shoot_a_bullet", &Test_Class::shoot_a_bullet) 
]; 

И следовать код Бесполезный 't дать мне выход на экране

luaL_dostring(myLuaState,"shoot_a_bullet(134)\n"); 

PS: Я положил cin.get() в конце, это не проблема.

Редактировать: Моя основная цель - позволить моему скрипту/Enemies напрямую добавлять материал в вектор, который содержит пули/эффект/врагов и т. Д.
Причина, по которой я не могу заставить статическую функцию, потому что мне нужен указатель основной игровой сцены, чтобы она работала.

следующие коды прекрасно работает

void print_hello(int number) { 
    cout << "hello world and : " << number << endl << "number from main : " << x << endl; 
} 

int x; //and the main with a global value 

int main() 
{ 
    cin >> x; 
    lua_State *myLuaState = luaL_newstate(); 

luabind::open(myLuaState); 

luabind::module(myLuaState)[ 
    luabind::def("print_hello", print_hello) 
]; 

luaL_dostring(
    myLuaState, 
    "print_hello(123)\n" 
    ); 
cin.get(); 
cin.get(); 

lua_close(myLuaState); 
} 

Мне нужен способ, чтобы сделать это в классе, это не главный

+0

Является ли функция 'shoot_a_bullet' объявленной в классе или снаружи? – Caesar

+0

попробуйте распечатать ошибку. У вас может возникнуть другая проблема –

+0

@Dmitry Ledentsov нет ошибки – MadokaMagica

ответ

2

Вы не можете зарегистрировать функции-члены, как это. Что делает, как следующее в C++:

Test_Class::shoot_a_bullet(134); 

MSVC, например, называет это «незаконным вызовом нестатической функции члена», и это именно то, что она есть.

Просмотрите раздел Binding classes to Lua в документации Luabind о том, как связать класс с Lua. Затем вам необходимо создать объект этого класса и вызвать функцию на нем, например. с myobject:shoot_a_bullet(134) в Lua (: является синтаксическим сахаром для передачи myobject в качестве первого аргумента).

Для того, чтобы увидеть ошибку, вам следует проверить обратное значение luaL_dostring. Если он возвращает true, вызов завершился неудачно. Сообщение помещается в стек Lua, как в виде строки, доступный с

lua_tostring(myLuaState, -1); 

В этом случае это должно быть что-то вроде

No matching overload found, candidates: 
void shoot_a_bullet(Test_Class&) 

Объяснение: При регистрации функции-члена в качестве бесплатного, Luabind добавляет дополнительный ссылочный параметр спереди, так что метод фактически вызывается для объекта аргумента, переданного для него.

+0

нужно убедиться, что автор не сделал статичным статический –

+0

Теперь кое-что меня беспокоит еще хуже, потому что оно возвращает true, и все равно никакого вывода – MadokaMagica

+0

'true' означает, что произошла ошибка (тогда как' false' означает успех). Это немного нелогично. См. Http://www.lua.org/manual/5.2/manual.html#luaL_dostring – Oberon

Смежные вопросы