Сбой при создании PyTuple в модуле C ++
-
21-09-2019 - |
Вопрос
Возникли некоторые проблемы с этим кодом.Пытаюсь вернуть кортеж кортежей (координаты) из модуля C ++, который я пишу.По-моему, это выглядит правильно, dirty
список содержит два Coord
с таким len
равно 2, то x
и y
значения элементов в списке следующие 0,0
и 0,1
соответственно.Первый раз, когда я пытаюсь это сделать, так что я вполне мог неправильно понять документы или что-то в этом роде.Какие-нибудь намеки?
PyObject* getDirty()
{
int len = dirty.size();
PyObject* tuple = PyTuple_New(len);
int count = 0;
for (std::list<Coord>::iterator i = dirty.begin(); i != dirty.end(); ++i)
{
PyTuple_SET_ITEM(tuple, count, PyTuple_Pack(2, (*i).x, (*i).y));
++count;
}
return tuple;
}
Редактировать: О, забыл упомянуть, что фактическая авария произошла на PyTuple_Set_ITEM
линия.
Решение
Аргументы в пользу PyTuple_Pack
, после первого, должно быть PyObject
указатели.
Возможно, вы захотите вместо этого
Py_BuildValue("(ii)", (*i).x, (*i).y)
... предполагая , что координаты на самом деле имеют тип int
.
Не связан с StackOverflow