编程语言
首页 > 编程语言> > 在c boost python列表中追加整数的错误

在c boost python列表中追加整数的错误

作者:互联网

我做了这个代码,它不起作用

#include <boost/python.hpp>

namespace bp = boost::python;

int main(int argc, char **argv) {

bp::list points;

int one = 1;
int two = 2;
int three = 3;
points.append(one); #crach!!
points.append(two);
points.append(three);

return 0;}

这就是为什么“追加”不接受整数和直接哪个是正确的方法?

编辑

解决方案是这样的:

#include <boost/python.hpp>

namespace bp = boost::python;

int main(int argc, char **argv) {
    Py_Initialize(); //this part
bp::list points;

int one = 1;
int two = 2;
int three = 3;
points.append(one); #crach!!
points.append(two);
points.append(three);
    Py_Finalize(); //this part
return 0;}

解决方法:

我认为你应该在导出的模块中使用boost :: python :: list,而不是直接从C程序中使用.原因很简单:boost :: python :: list是Python列表对象的包装器,为了使用它,你需要一个Python解释器,当你尝试从main方法操作列表时,它不可用.

这是一个有效的例子:

#include <boost/python.hpp>

namespace bp = boost::python;

bp::list getlist() {
  bp::list points;
  int one = 1;
  int two = 2;
  int three = 3;
  points.append(one);
  points.append(two);
  points.append(three);
  return points;
}

BOOST_PYTHON_MODULE(listtest) {
  using namespace boost::python;
  def("getlist", getlist);
}

编译此模块并运行getlist函数表明一切都按预期工作:

>>> import listtest
>>> print listtest.getlist()
[1, 2, 3]

标签:boost-python,c,python-2-7
来源: https://codeday.me/bug/20191008/1872222.html