2009-02-17 2 views
4

настоящее время у меня следующий код 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) 

, где г: SetVertexes() isimplemented в 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 . . . 

Любые идеи?

+0

Что такое тип данных вершин? – Vinay

+0

vertexes - это двойной массив * –

+0

на данный момент я обошел эту проблему, добавив SetVertex (int idx, double vertex) –

ответ

1

Try записывания:

void CGeometry::SetVertexes(double vertexes[]); 

в интерфейсе Defintion. Судя по документации, SWIG делает разницу между указателями и массивами.

+0

в какой-то момент я изменил двойные * вершины на двойные вершины [] и получил ту же ошибку –

0

Вы можете вы carrays.i модуль, как описано здесь: http://www.swig.org/Doc1.3/Library.html

Например у вас есть такая функция в 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 
Смежные вопросы