[Logo]
LUA Форум
  [Search] Поиск   [Recent Topics] Последние темы   [Hottest Topics] Горячие темы   [Members]  Список участников   [Groups] На главную страницу 
[Register] Регистрация / 
[Login] Вход 
Как лучше связать C++ переменную и Lua-переменную?  XML
Индекс форума » LUA: Общие вопросы
Автор Сообщение
xVekx
Новичок

Зарегистрирован: 04/06/2008 20:37:52
Сообщений: 6
Оффлайн

писал класс но не могу понять в чем проблема и как её исправить


ошибка
Lua.cpp

F:\PRO\openGL\openGL002\Lua.cpp(4) : warning C4067: unexpected tokens following preprocessor directive - expected a newline
F:\PRO\openGL\openGL002\Lua.cpp(47) : error C2664: 'lua_pushcclosure' : cannot convert parameter 2 from 'int (struct lua_State *)' to 'int (__cdecl *)(struct lua_State *)'
None of the functions with this name in scope match the target type
main.cpp
f:\pro\opengl\opengl002\lua.h(12) : error C2061: syntax error : identifier 'lua_State'
smz
ГУРУ

Зарегистрирован: 14/03/2008 13:23:00
Сообщений: 245
Оффлайн

xVekx wrote:F:\PRO\openGL\openGL002\Lua.cpp(4) : warning C4067: unexpected tokens following preprocessor directive - expected a newline
F:\PRO\openGL\openGL002\Lua.cpp(47) : error C2664: 'lua_pushcclosure' : cannot convert parameter 2 from 'int (struct lua_State *)' to 'int (__cdecl *)(struct lua_State *)'
None of the functions with this name in scope match the target type
main.cpp
f:\pro\opengl\opengl002\lua.h(12) : error C2061: syntax error : identifier 'lua_State'

По поводу 1-й ошибки - ищи в Google "warning C4067" или нажми F1.
Вторая и третья, возможно, исчезнут, если инклуды Lua обернуть в extern "C":
xVekx
Новичок

Зарегистрирован: 04/06/2008 20:37:52
Сообщений: 6
Оффлайн

все перепробовал но
error C2664: 'lua_pushcclosure' : cannot convert parameter 2 from 'int (struct lua_State *)' to 'int (__cdecl *)(struct lua_State *)'
None of the functions with this name in scope match the target type

так и не хочет исчезать
smz
ГУРУ

Зарегистрирован: 14/03/2008 13:23:00
Сообщений: 245
Оффлайн

Поставь extern "C" перед определением функций, которые передаются вторым аргументом в lua_pushcclosure. Например:
или
xVekx
Новичок

Зарегистрирован: 04/06/2008 20:37:52
Сообщений: 6
Оффлайн

дык я пробовал уже это сделать всеравно
lua_pushcclosure' : cannot convert parameter 2 from 'int (struct lua_State *)' to 'int (__cdecl *)(struct lua_State *)'
None of the functions with this name in scope match the target type

все получается если я не описываю функцию int connect(lua_State* luaVM); в классе
но возникает проблема в передачи массива

из const char* SERVERADDR;
в const char* SERVERADDRclass обявленом в классе;
smz
ГУРУ

Зарегистрирован: 14/03/2008 13:23:00
Сообщений: 245
Оффлайн

Нельзя передать функцию-нестатический член класса вторым параметром в lua_pushcclosure. Тип не тот.
xVekx
Новичок

Зарегистрирован: 04/06/2008 20:37:52
Сообщений: 6
Оффлайн

ну а как быто то
smz
ГУРУ

Зарегистрирован: 14/03/2008 13:23:00
Сообщений: 245
Оффлайн

xVekx wrote:ну а как быто то
Прежде всего уяснить самому себе, чего хочешь добиться, и не создавать искусственных трудностей. Непонятно, что инкапсулируется классом "lua" (PORT и SERVERADDR?), и почему этот класс тогда называется "lua"? Непонятно, как функция connect может знать, к какому экземпляру класса этот вызов относится, если эта информация не передаётся из скрипта Lua? Так что дело не в ошибке компиляции, компилятор просто выявил одну из ошибок дизайна. До свиданья.
Mister_SER
Новичок

Зарегистрирован: 01/08/2008 18:23:41
Сообщений: 37
Оффлайн

как можна из с++ не получить, а изменить переменую?)
P.S.
Я лично получаю так:

Это сообщение было редактировано 1 раз. Последнее обновление произошло в 30/08/2008 20:31:15

[ICQ]
z00n
Постоянный посетитель

Зарегистрирован: 15/02/2008 12:15:56
Сообщений: 96
Оффлайн

Mister_SER wrote:
Я лично получаю так:


Ваша функция всегда возвращает 1 - вам оно надо?

Это сообщение было редактировано 2 раз. Последнее обновление произошло в 30/08/2008 21:34:22

Mister_SER
Новичок

Зарегистрирован: 01/08/2008 18:23:41
Сообщений: 37
Оффлайн

сори, я просто чтото с чемто спутал(писал по тому, что помнил...).. сегодня утром удалил все исходники(случайно)
спс за все
P.S. вообще правильно
так что мы оба ошиблись чучуть

Это сообщение было редактировано 4 раз. Последнее обновление произошло в 30/08/2008 22:33:51

[ICQ]
GrayFace
Новичок

Зарегистрирован: 17/06/2008 06:54:06
Сообщений: 27
От: Новосибирск
Оффлайн

Mister_SER wrote:P.S. вообще правильно

Вообще-то нет. Так некрасиво и чуть медленнее. Правильнее luaL_checkinteger(L, -1), как и было у z00n'а

Это сообщение было редактировано 1 раз. Последнее обновление произошло в 31/08/2008 00:11:02

[Email] [ICQ]
Mister_SER
Новичок

Зарегистрирован: 01/08/2008 18:23:41
Сообщений: 37
Оффлайн

вообзето да, испошлбзуя метод z00n'а , прога падает
[ICQ]
z00n
Постоянный посетитель

Зарегистрирован: 15/02/2008 12:15:56
Сообщений: 96
Оффлайн

Mister_SER wrote:вообзето да, испошлбзуя метод z00n'а , прога падает


Не верите мне - читайте PIL(http://www.lua.org/pil/24.2.3.html)
Roberto Ierusalimschy wrote:
The lua_gettop function returns the number of elements in the stack, which is also the index of the top element.
Notice that a negative index -x is equivalent to the positive index gettop - x + 1.
Mister_SER
Новичок

Зарегистрирован: 01/08/2008 18:23:41
Сообщений: 37
Оффлайн

но почему же тогда когда я делаю как говорите вы, у меня постояно вылетает, а когда я делаю, как говорю я, у меня все ок
P.S. можна так: luaL_checkinteger(L,1)
P.S.2 при получение результата функции луа(если один результат и ето число), так: luaL_checkinteger(L,0)
P.S.3 и в том, и в том случаэ, можна делать так: luaL_checkinteger(L,lua_gettop(L))
P.S.4 все проверено на практике: VS 9.0, Lua 5.1.4

Это сообщение было редактировано 4 раз. Последнее обновление произошло в 31/08/2008 02:45:57

[ICQ]
 
Индекс форума » LUA: Общие вопросы
Перейти:   
Powered by JForum 2.1.8 © JForum Team