Я пытаюсь вызвать метод, определенный в c ++, через python, используя boost python, но получаю эту ошибку:
NameError: global name 'print1' is not defined
Мой код для определения модуля:
namespace python = boost::python;
class Strat
{
public:
virtual int print1()=0;
virtual std::vector<long long> gen_fibonacci(int in,int n)= 0;
};
class PyStrat final
: public Strat
, public bp::wrapper<Strat>
{
int print1()
{
std::cout<<"Congratulations! I ran"<<"\n";
return 1;
}
std::vector<long long> gen_fibonacci(int in,int n) override
{
get_override("gen_fibonacci")();
}
};
BOOST_PYTHON_MODULE(Strat)
{
bp::class_<PyStrat, boost::noncopyable>("Strat")
.def("print1", &Strat::print1)
;
bp::class_<std::vector<long long> >("Long_vec")
.def(bp::vector_indexing_suite<std::vector<long> >())
;
bp::class_<PyStrat, boost::noncopyable>("Strat")
.def("gen_fibonacci", &Strat::gen_fibonacci)
;
}
И вызов метода print1 () из python:
from Strat import *
class Strategy:
def gen_fibonacci(self,ind,n):
print1()
l=[]
num = 3
t1 = 0
t2 = 1
nextTerm = 0
i=1
if ind==1:
l.append(0)
l.append(1)
i=3
if ind==2:
l.append(1)
i=2
while i<n:
nextTerm=t1+t2
t1=t2
t2=nextTerm
if num>=ind:
i=i+1
l.append(nextTerm)
num=num+1
return l
Что я делаю не так? Я видел Boost Python - Глобальный и локальный словарь , но он все еще не решен, поэтому я спросил его здесь ....