【发布时间】:2017-11-24 21:26:24
【问题描述】:
我正在尝试将 lua 嵌入到 C++ 程序中。在我尝试实现接口之前它运行良好。 通常,在某些时候会引入一个结构数组来将 lua 中的名称映射到 C 中定义的函数。 结构是typedef,是在lauxlib.h中完成的,是用C写的。我相信我的作品可以称得上是C++。
我需要这种类型的结构数组,以便将其传递给处理 C-Lua 交互的辅助函数。
如果可能,我希望将它们保留在单独的命名空间中。
我需要使用以下命令由 g++ 编译程序:
g++ -std=c++14 -static -fno-optimize-sibling-calls -fno-strict-aliasing -D_LINUX -lm -s -x c++ -O2 -Wall -Wtype-limits -Wno-unknown-pragmas -o $name $files
在编译过程中出现以下错误:
In file included from MyInterfaceWrappers.h:3:0,
from MyInterface.h:12,
from MyInterface.cpp:1: MyInterfacePlayer.h:32:2: error: elements of array ‘const MyInterfaceWrappers::luaL_reg
MyInterfaceWrappers::MyMetamethods []’ have incomplete type };
这里是错误消息引用的文件的内容(它们被略微修剪,但它是消息指向的命名空间内的 const 结构):
extern "C"{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
static int getId (lua_State *L);
static int isMe (lua_State *L);
namespace MyInterfaceWrappers {
const struct luaL_reg MyMetamethods [] = {
{"getId",getId},
{"isMe",isMe},
{NULL,NULL}
};
};
如何解决这个问题?可以在不更改 C 源代码的情况下解决此问题吗?
【问题讨论】:
-
使用
const struct luaL_reg告诉编译器“类型是luaL_reg,相信我是struct”。省略struct会产生一个编译错误,表明该类型不存在,这将使您能够检测到拼写错误。 -
这不是一个“简单”的错字,而是一个系统性的错字,在从 C 到 C++ 的转换过程中很容易陷入其中。请保持打开状态。
-
@JensGustedt 拼写错误
luaL_Reg。我不会投票关闭这个拼写错误,因为除此之外这个问题还有很多意义。