Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;LuaBridge尝试索引用户数据值(本地';自身';)_C++_Lua_Luabridge - Fatal编程技术网

C++ C++;LuaBridge尝试索引用户数据值(本地';自身';)

C++ C++;LuaBridge尝试索引用户数据值(本地';自身';),c++,lua,luabridge,C++,Lua,Luabridge,我已经在我的框架中创建了一个围绕LuaBridge的包装器,这样我就可以轻松地将LuaBridge换成另一个库。我有一些类在LuaBridge中注册,作为框架初始化的一部分。然后,我可以在Lua中轻松地访问或实例化这些类。当我想对已经在frameworkinit中注册的类/表调用自定义方法时,就会出现问题,我在Lua中定义了该类/表 function MyObject:OnUpdate() self:Init() end 如果我尝试通过传递MyObject的实例调用OnUpdate,以便可

我已经在我的框架中创建了一个围绕LuaBridge的包装器,这样我就可以轻松地将LuaBridge换成另一个库。我有一些类在LuaBridge中注册,作为框架初始化的一部分。然后,我可以在Lua中轻松地访问或实例化这些类。当我想对已经在frameworkinit中注册的类/表调用自定义方法时,就会出现问题,我在Lua中定义了该类/表

function MyObject:OnUpdate()
  self:Init()
end
如果我尝试通过传递MyObject的实例调用OnUpdate,以便可以利用self,则会出现以下错误:

“尝试索引userdata值(本地“self”)”


如果我手动注册MyObject,而不是允许框架在启动时对其进行初始化,那么它可以完美地工作。就好像Lua可以解析MyObject的元表,尽管我可以清楚地看到它的定义。我似乎也找不到Lua的确切错误。

我解决了我的问题。我上面提到的注册的类位于另一个库(DLL)中。我正在为每个类生成键,并将这些键存储在Lua注册表中。密钥生成使用静态模板化方法,该方法返回每种类型的静态字符的地址。当调用代码从DLL返回到我的EXE中时,我正在注册一个新类,该类继承自DLL中的一个预注册类。当我查找基类的键时,它是不同的,因为执行最初是在DLL的上下文中运行的,现在它是在我的EXE的上下文中运行的。我认为这是C++中使用模板和代码执行的结果。在使用C++ 15多年之后,我学到了一些新东西。希望这能帮助其他人