Boost.Python - 参数化构造函数出错
Posted
技术标签:
【中文标题】Boost.Python - 参数化构造函数出错【英文标题】:Boost.Python - error with parametrized constructor 【发布时间】:2019-04-04 08:47:38 【问题描述】:我在文件 test.h 中有一个来自 tutorialspoint 的玩具类:
class Box
public:
Box(int l, int b, int h)
length = l;
breadth = b;
height = h;
double getVolume(void)
return length * breadth * height;
void setLength( double len )
length = len;
void setBreadth( double bre )
breadth = bre;
void setHeight( double hei )
height = hei;
private:
double length; // Length of a box
double breadth; // Breadth of a box
double height; // Height of a box
;
在我的另一个文件中:
BOOST_PYTHON_MODULE(test)
namespace python = boost::python;
python::class_<Box>("Box")
.def("setLength", &Box::setLength )
.def("setBreadth", &Box::setBreadth)
.def("setHeight", &Box::setHeight )
.def("getVolume", &Box::getVolume );
当我编译这段代码时,我收到有关 Box 类构造函数的错误消息:
/usr/include/boost/python/object/value_holder.hpp:133:13: error: no matching function for call to ‘Box::Box()’
BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_UNFORWARD_LOCAL, nil)
^
我错过了什么?
我需要在 BOOST_PYTHON_MODULE() 中编写构造函数参数吗?如果有,该怎么做?
【问题讨论】:
【参考方案1】:您没有默认构造函数,并且缺少您声明的构造函数:
BOOST_PYTHON_MODULE(test)
namespace python = boost::python;
python::class_<Box>("Box", boost::python::init<int, int, int>())
.def("setLength", &Box::setLength )
.def("setBreadth", &Box::setBreadth)
.def("setHeight", &Box::setHeight )
.def("getVolume", &Box::getVolume );
【讨论】:
我也不懂@YSC,这解决了问题。 其实答案,比@YSC 的建议更好(因为它改变了对象的合同,对不起!)。 错误:'init' 不是 'boost' 的成员 python::class_编译器抱怨Box
没有提供默认构造函数BOOST_PYTHON_MODULE
需要:
no matching function for call to ‘Box::Box()
简单定义一个:
class Box
public:
Box() = default;
// [...]
;
另外,您可以查看 mohabouje 的答案。
【讨论】:
以上是关于Boost.Python - 参数化构造函数出错的主要内容,如果未能解决你的问题,请参考以下文章
Boost Python 暴露 C++ 类,构造函数采用 std::list
将 boost::python::numpy::ndarray 作为 boost::python 函数的(默认与否)参数传递?
org.springframework.beans.factory.BeanCreationException:创建名为“”的bean时出错:通过构造函数进行bean实例化失败;