Boost Python包装的虚拟类-子级返回错误:不匹配C++;签名 我有一个C++对象,它是虚拟类的子对象,我试图用Python来包装。该文件可以编译,我可以将其导入python,但当我尝试调用该函数时,出现了一个错误: In [3]: x Out[3]: <beh.MappedBehaviourDomain at 0x23e7158> //So, obviously the constructor is working (or at least thinks it is) In [4]: x.subject_count() --------------------------------------------------------------------------- ArgumentError Traceback (most recent call last) /home/max/verk/btr-email/build/x86_64/bin/ipython in <module>() ----> 1 x.subject_count() ArgumentError: Python argument types in BehaviourDomainWrap.subject_count(MappedBehaviourDomain) did not match C++ signature: subject_count(BehaviourDomainWrap {lvalue}) subject_count(BehaviourDomainWrap {lvalue}) [3]中的:x 出[3]: //因此,显然构造函数正在工作(或者至少认为它在工作) 在[4]中:x.受试者计数() --------------------------------------------------------------------------- ArgumentError回溯(上次最近的调用) /home/max/verk/btr email/build/x86_64/bin/ipython in() ---->1 x.受试者人数() ArgumentError:中的Python参数类型 行为域wrap.subject\u计数(MappedBehaviorDomain) 与C++签名不匹配: 主题计数(行为域包装{lvalue}) 主题计数(行为域包装{lvalue})

Boost Python包装的虚拟类-子级返回错误:不匹配C++;签名 我有一个C++对象,它是虚拟类的子对象,我试图用Python来包装。该文件可以编译,我可以将其导入python,但当我尝试调用该函数时,出现了一个错误: In [3]: x Out[3]: <beh.MappedBehaviourDomain at 0x23e7158> //So, obviously the constructor is working (or at least thinks it is) In [4]: x.subject_count() --------------------------------------------------------------------------- ArgumentError Traceback (most recent call last) /home/max/verk/btr-email/build/x86_64/bin/ipython in <module>() ----> 1 x.subject_count() ArgumentError: Python argument types in BehaviourDomainWrap.subject_count(MappedBehaviourDomain) did not match C++ signature: subject_count(BehaviourDomainWrap {lvalue}) subject_count(BehaviourDomainWrap {lvalue}) [3]中的:x 出[3]: //因此,显然构造函数正在工作(或者至少认为它在工作) 在[4]中:x.受试者计数() --------------------------------------------------------------------------- ArgumentError回溯(上次最近的调用) /home/max/verk/btr email/build/x86_64/bin/ipython in() ---->1 x.受试者人数() ArgumentError:中的Python参数类型 行为域wrap.subject\u计数(MappedBehaviorDomain) 与C++签名不匹配: 主题计数(行为域包装{lvalue}) 主题计数(行为域包装{lvalue}),c++,boost-python,C++,Boost Python,我很难理解这个错误;这是我第一次使用Boost Python,而且我对C++没有太多的经验。以下是相关代码: // Instantiating class for use in boost python struct BehaviourDomainWrap : BehaviourDomain, wrapper<BehaviourDomain> { size_t subjectCount() const { return this->get_overrid

我很难理解这个错误;这是我第一次使用Boost Python,而且我对C++没有太多的经验。以下是相关代码:

// Instantiating class for use in boost python
struct BehaviourDomainWrap : BehaviourDomain, wrapper<BehaviourDomain>
{
    size_t subjectCount() const {
        return this->get_override("subjectCount")();
    // A bunch of other methods removed
}


BOOST_PYTHON_MODULE(beh) {

    class_<BehaviourDomainWrap, boost::noncopyable>("BehaviourDomainWrap")
        .def("subject_count", pure_virtual(& BehaviourDomainWrap::subjectCount))
    ;

    class_<MappedBehaviourDomain, bases<BehaviourDomainWrap> >
        ("MappedBehaviourDomain", init<std::string>())
    ;
}
//实例化用于boost python的类
结构行为域包装:行为域,包装器
{
大小\u t subjectCount()常量{
返回此->获取覆盖(“subjectCount”)();
//删除了一系列其他方法
}
BOOST_PYTHON_模块(beh){
类(“行为域包装”)
.def(“主题计数”,纯虚拟(&BehaviorDomainWrap::主题计数))
;
阶级_
(“映射域”,init())
;
}

出了什么问题,为什么?

我传递的是对象的包装版本,而不是基础。我应该:

class_<BehaviourDomainWrap, boost::noncopyable>("beh")
    .def("subject_count", pure_virtual(& BehaviourDomain::subjectCount))
;

class_<MappedBehaviourDomain, bases<BehaviourDomain> >
    ("mapped_beh", init<std::string>())
;
类(“beh”)
.def(“主题计数”,纯虚拟(&行为域::主题计数))
;
阶级_
(“映射的_-beh”,init())
;