C++ swiglua和传递数组
我目前拥有以下lua代码:C++ swiglua和传递数组,c++,arrays,lua,swig,C++,Arrays,Lua,Swig,我目前拥有以下lua代码: g = engine.CGeometry() vertexes = {} vertexes[1] = 0 vertexes[2] = 0 vertexes[3] = 0 vertexes[4] = 0 vertexes[5] = -1 vertexes[6] = 0 vertexes[7] = -1 vertexes[8] = 0 vertexes[9] = 0
g = engine.CGeometry()
vertexes = {}
vertexes[1] = 0
vertexes[2] = 0
vertexes[3] = 0
vertexes[4] = 0
vertexes[5] = -1
vertexes[6] = 0
vertexes[7] = -1
vertexes[8] = 0
vertexes[9] = 0
print "adding vertexes"
g:SetVertexes(vertexes)
其中,在C++中实现了:
void CGeometry::SetVertexes(double* vertexes){
this->vertexes = vertexes;
}
导致此错误的原因:
adding vertexes
PANIC: unprotected error in call to Lua API (Error in SetVertexes (arg 2), expected 'double *' got 'table')
Press any key to continue . . .
有什么想法吗?试着写:
void CGeometry::SetVertexes(double vertexes[]);
在接口定义中。从文档中可以看出,SWIG在指针和数组之间起到了不同的作用。您可以按照如下所述执行.i模块: 例如,在C++中有这样的函数:
void fun(double arr[]) { }
然后将模块加载到.i文件中:
%include "carrays.i"
%array_functions(double, doubleArray);
void fun(double arr[]);
在Lua脚本中:
a = new_doubleArray(10) # Create an array
doubleArray_setitem(a,0,5.0) # Set value 5.0 on index 0
fun(a) # Pass to C
delete_doubleArray(a) # Destroy array
顶点的数据类型是什么?目前我通过添加一个SetVertex(intidx,double-vertex)避开了这个问题,我在使用Python时遇到了类似的问题。表(或Python中的列表)不使用SWIG转换为数组。有一次,我将double*顶点更改为double vertex[],并得到了相同的错误