2016-07-24 94 views
0

我已经在C++中编写了一个函数并且已成功构建。boost python C++函数调用另一个函数错误

但是,如果我只是从C++中的另一个函数调用它,那么构建失败。

double getlistvalue(boost::python::list l, int index) 
{ 
    if (index = -1) 
     return 0; 
    else 
     return boost::python::extract<double>(l[index]); 

} 

double xx(boost::python::list l, int index) 
{ 
    return getlistvalue(l, index); 
} 

上面的代码,没有第二个函数,它构建。

以下是错误信息: error info

请分享如何解决这个问题的想法。非常感谢。

回答

1

您正在按值传递列表,这需要复制构造函数。错误消息告诉你没有复制构造函数被提供给列表。因此,解决方案是通过引用列表:

double getlistvalue(const boost::python::list &l, int index) 

(和其他功能相同)。

通常,按值传递像列表这样的复杂对象是一个坏主意,因为即使已经提供了一个复制构造函数,但实际制作复制代码可能会非常昂贵。

+0

非常感谢您的回复,您的回答是正确的,将解决问题。发现另一种方法是在包含boost/python头文件之前添加#define BOOST_PYTHON_STATIC_LIB。只针对有类似问题的人。 – datalearning

+0

@datalearning Python列表有一个拷贝构造函数。正如您发现的那样,错误消息(无法解析的符号)表示需要使用适当的符号可见性链接Boost.Python库。 Python对象是引用计数的,而Boost.Python对象本质上是智能指针。因此,按价值传递这些对象是便宜的。 –

相关问题