verwende ich Boost 1.57 und Boost Python. Hier ist mein Codebeispiel:Boost Python-Liste erhalten Element verursacht Fehler, wenn ich Operator []
list records = call_method<list>(...);
object attr = records.attr("__len__")();
int n = extract<long>(attr);
for (int i = 0; i < n; ++i)
{
records[i];
}//here cause error
In dieser Liste habe ich einige Tupel enthaltenen Strings aus Python gespeichert. Es scheint, dass Datensätze [i] außerhalb dieses Bereichs Py_DECREF aufrufen und einen Fehler verursachen. Wie sollte ich also Daten von einem Artikel erhalten?
Was ist 'Datensätze [i];' tun soll? Was ist 'liste'? Ich nehme keine 'std :: list' an, da diese keinen wahlfreien Zugriff hat. Was ist der Fehler? – doctorlove
'list' ist die boost :: python :: list. Zuerst habe ich 'boost :: python :: call_method>> (...)' verwendet, um das Ergebnis zu erhalten, aber den Programmabsturz zu verursachen. Dann fand ich, dass es 'boost :: python :: list' verwenden sollte, um das Ergebnis zu behalten. Aber auch wenn ich 'boost :: python :: object obj = records [i]' schreibe, stürzt auf 'Py_DECREF' in' ~ object_base() 'ab, wenn der loop scope ausgeht. Also, wie soll ich das richtig machen? –
webberg