luabind:无法访问全局变量

山姆,我不得不

我有一个C ++类,我想通过全局变量在lua脚本中提供访问权限,但是当我尝试使用它时,出现以下错误:

terminate called after throwing an instance of 'luabind::error'
  what():  lua runtime error
baz.lua:3: attempt to index global 'foo' (a nil value)Aborted (core dumped)

我的Lua脚本(baz.lua)如下所示:

-- baz.lua
frames = 0
bar = foo:createBar()

function baz()
  frames = frames + 1

  bar:setText("frame: " .. frames)
end

我制作了一个简单而又简短的(尽我所能)的main.cpp来重现此问题:

#include <memory>
#include <iostream>

extern "C" {
  #include "lua.h"
  #include "lualib.h"
  #include "lauxlib.h"
}

#include <boost/ref.hpp>
#include <luabind/luabind.hpp>

class bar
{
public:
  static void init(lua_State *L)
  {
    using luabind::module;
    using luabind::class_;

    module(L)
    [
      class_<bar>("bar")
        .def("setText", &bar::setText)
    ];
  }

  void setText(const std::string &text)
  {
    std::cout << text << std::endl;
  }
};

class foo
{
public:
  foo() :
    L(luaL_newstate())
  {
    int ret = luaL_dofile(L, "baz.lua");
    if (ret != 0) {
      std::cout << lua_tostring(L, -1);
    }

    luabind::open(L);

    using luabind::module;
    using luabind::class_;

    module(L)
    [
      class_<foo>("bar")
        .def("createBar", &foo::createBar)
    ];

    bar::init(L);
    luabind::globals(L)["foo"] = boost::ref(*this);
  }

  boost::reference_wrapper<bar> createBar()
  {
    auto b = std::make_shared<bar>();
    bars_.push_back(b);

    return boost::ref(*b.get());
  }

  void baz()
  {
    luabind::call_function<void>(L, "baz");
  }

private:
  lua_State *L;
  std::vector<std::shared_ptr<bar>> bars_;
};

int main()
{
  foo f;

  while (true) {
    f.baz();
  }
}

编译为:

g++ -std=c++11 -llua -lluabind main.cpp

我发现,如果将bar = foo:createBar()放到baz()函数中,那么它不会出错,所以我假设我没有在全局名称空间中正确初始化全局变量?在执行此操作之前,我是否缺少需要调用的luabind函数?还是根本不可能...

谢谢!

世界银行

您正在运行,baz.lua然后注册任何全局变量。dofile在注册绑定后放置命令。

顺序如下:

  • 您在C ++中调用foo的构造函数
  • 创建一个Lua状态
  • 运行 lua.baz
  • 注册您的绑定
  • 然后在c ++中调用f.baz。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法访问更新的全局变量的值

来自分类Dev

无法访问打字稿中的全局变量

来自分类Dev

Angular 2“ this”无法访问嵌套函数中的全局变量

来自分类Dev

在C / C ++程序中,可以定义某些函数无法访问的全局变量吗?

来自分类Dev

在JavaScript中创建全局变量,控制台无法访问

来自分类Dev

为什么在函数中无法访问我的全局变量?

来自分类Dev

nodejs:mysql 无法访问连接查询回调中的全局变量

来自分类Dev

无法访问 citrus-context.xml 中的全局变量

来自分类Dev

为什么我的函数和循环无法访问我的全局变量?

来自分类Dev

jquery全局变量无法从外部访问

来自分类Dev

为什么即使稍后在代码中定义了局部变量,全局变量也无法访问

来自分类Dev

无法访问PHP中的全局变量-“致命错误:在非对象上调用成员函数query()”

来自分类Dev

无法在函数内部访问JavaScript全局变量

来自分类Dev

无法在page.open()内部访问全局变量-PhantomJS

来自分类Dev

无法由ajax加载的脚本访问全局变量

来自分类Dev

无法从类构造函数中访问全局变量

来自分类Dev

无法从 Angular 中的 JQuery on() 方法访问全局变量

来自分类Dev

函数访问全局变量

来自分类Dev

如何访问全局变量

来自分类Dev

从模块访问全局变量?

来自分类Dev

无法打印全局变量

来自分类Dev

无法访问变量

来自分类Dev

无法访问“变量”?

来自分类Dev

无法访问变量

来自分类Dev

C ++-访问全局变量对象

来自分类Dev

在Swift中访问全局变量

来自分类Dev

通过窗口访问全局变量

来自分类Dev

Javascript:匿名函数,访问全局变量

来自分类Dev

jQuery / AJAX并发访问全局变量

Related 相关文章

热门标签

归档