Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.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++ 在boost::python向量索引套件上迭代时出现意外结果_C++_Python_Boost Python_Stdvector - Fatal编程技术网

C++ 在boost::python向量索引套件上迭代时出现意外结果

C++ 在boost::python向量索引套件上迭代时出现意外结果,c++,python,boost-python,stdvector,C++,Python,Boost Python,Stdvector,我已经成功地包装了一个名为Composite的类。 此类具有以下方法: std::vector<Composite*> Composite::getChildren(); 但是当我尝试在CompositeArray上迭代时,就像这样: for child in myComp.getChildren(): # do something with child... 我收到了以下错误消息: TypeError: No to_python (by-value) converter

我已经成功地包装了一个名为Composite的类。 此类具有以下方法:

std::vector<Composite*> Composite::getChildren();
但是当我尝试在CompositeArray上迭代时,就像这样:

for child in myComp.getChildren():
    # do something with child...
我收到了以下错误消息:

TypeError: No to_python (by-value) converter found for C++ type: class Composite * __ptr64
这对我来说没有任何意义,因为通过索引进行访问工作得非常好! 我被困在这个。。。你知道我做错了什么吗

谢谢。

试试看

class_<Composite, Composite*>("Composite", init<>())
类(“复合”,init()) 而不是

class_<Composite>("Composite", init<>())
类(“复合”,init())
类复合*\uuu ptr64
看起来像迭代器返回纯指针,而
boost::python
尝试将其复制为python包装的对象。我猜您没有提供类似于
class\uz()
的东西。可以显示
复合::迭代器::运算符*()
的返回类型吗?谢谢elmo,但不应该显示指向类处理的复合的指针吗?我从未见过包装指针,只有类型。。。所以我现在更糊涂了。对于Composite::iterator::operator*(),Composite本身是什么意思?它只是一个普通类,没有迭代器…哦,我错过了名为
CompositeArray
的容器,它继承自
std::vector
。在这种情况下,
CompositeArray::iterator::operator*()
的返回值将是指针。我很惊讶它会编译,因为如果您试图用
.def(“some_函数”、&some_函数)
定义一个函数
Composite*some_函数()
,它会给您一个错误,说明您需要提供返回策略。我认为在上面的代码中我们也需要这样做。没错,elmo,我包装了其他返回指针的方法,实际上我必须为它们指定一个返回策略。所以现在的问题可能是:我如何为包装好的std::vector(或者CompositeArray,如果您愿意的话)指定返回策略?我可能会复制并讨论这个问题。或者只是从中继承并重写
get_item
,作为第一次尝试。
class_<Composite, Composite*>("Composite", init<>())
class_<Composite>("Composite", init<>())