[Logo] LUA Форум
  [Search] Search   [Recent Topics] Recent Topics   [Hottest Topics] Hottest Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
Как лучше связать C++ переменную и Lua-переменную?  XML
Forum Index » LUA: Общие вопросы
Author Message
xVekx
Новичок

Joined: 04/06/2008 20:37:52
Messages: 6
Offline

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


ошибка
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
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

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
Новичок

Joined: 04/06/2008 20:37:52
Messages: 6
Offline

все перепробовал но
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
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

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

Joined: 04/06/2008 20:37:52
Messages: 6
Offline

дык я пробовал уже это сделать всеравно
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
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

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

Joined: 04/06/2008 20:37:52
Messages: 6
Offline

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

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

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

Joined: 01/08/2008 18:23:41
Messages: 37
Offline

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

This message was edited 1 time. Last update was at 30/08/2008 20:31:15

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

Joined: 15/02/2008 12:15:56
Messages: 96
Offline

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


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

This message was edited 2 times. Last update was at 30/08/2008 21:34:22

Mister_SER
Новичок

Joined: 01/08/2008 18:23:41
Messages: 37
Offline

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

This message was edited 4 times. Last update was at 30/08/2008 22:33:51

[ICQ]
GrayFace
Новичок

Joined: 17/06/2008 06:54:06
Messages: 27
Location: Новосибирск
Offline

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

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

This message was edited 1 time. Last update was at 31/08/2008 00:11:02

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

Joined: 01/08/2008 18:23:41
Messages: 37
Offline

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

Joined: 15/02/2008 12:15:56
Messages: 96
Offline

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
Новичок

Joined: 01/08/2008 18:23:41
Messages: 37
Offline

но почему же тогда когда я делаю как говорите вы, у меня постояно вылетает, а когда я делаю, как говорю я, у меня все ок
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

This message was edited 4 times. Last update was at 31/08/2008 02:45:57

[ICQ]
 
Forum Index » LUA: Общие вопросы
Go to:   
Powered by JForum 2.1.9 © JForum Team