Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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++ swiglua和传递数组_C++_Arrays_Lua_Swig - Fatal编程技术网

C++ swiglua和传递数组

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

我目前拥有以下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

    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[],并得到了相同的错误