2013-12-19 2 views
2

C++ Я цветовым этот код и он не работаетошибка, чтобы добавить целое число в списке подталкивание питона

#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;} 
+0

Какую ошибку вы получаете? – vitaut

ответ

0

Из документации, это выглядит как метод шаблона. Таким образом, вы можете попробовать

points.append<int>(one); 
+0

Большое спасибо, но это не проблема ... где эта документация? – ljofre

+0

http://www.boost.org/doc/libs/1_37_0/libs/python/doc/v2/list.html – doptimusprime

+0

Это не имеет смысла, потому что аргумент шаблона будет выведен так или иначе, даже если вы не упомянули в callsite. – Nawaz

2

Я думаю, вы должны использовать 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] 
+0

Это правда, но я делаю основную программу для отладки этих функций. – ljofre

+0

Я думаю, у вас есть два варианта: либо отлаживать его, вызывая Python, либо вставлять интерпретатор Python. – vitaut

Смежные вопросы