boost python — (C ++) ошибка: недопустимое использование нестатической функции-члена «int Demo :: addTwoNumbers (int, int)»

Я пытаюсь обернуть простой демонстрационный класс функцией «addTwoNumbers» с надписью boost python. Вот заголовочный файл:

#ifndef DEMO_H_
#define DEMO_H_

#include <boost/function.hpp>

class Demo
{
public:
Demo() {}
virtual ~Demo() {}

typedef void (DemoCb) (int,int,int);
boost::function<DemoCb> onAddTwoNumbers;

int addTwoNumbers(int x, int y);

// Executes a callback within a thread not controlled by the caller.
void addTwoNumbersAsync(int x, int y, boost::function<DemoCb> callback);

};

#endif /* DEMO_H_ */

И вот упаковка:

#include <boost/python.hpp>
#include "../demo.h"using namespace boost::python;

// Create a python module using boost. The name 'demo' must match the name in the makefile
BOOST_PYTHON_MODULE(python_wrap_demo) {
// Wrapping the addTwoNumbers function:
class_<Demo>("Demo", init<>())
.def("addTwoNumbers", Demo::addTwoNumbers)
;
}

Я получил это, чтобы работать для аналогичной функции, которая не была включена в класс. Почему я сейчас получаю эту ошибку?

0

Решение

Я не знаком с boost::pythonно я верю что тебе просто нужно & передать адрес участника .def("addTwoNumbers", &Demo::addTwoNumbers), Не-функции и статические функции-члены могут быть неявно преобразованы в указатели на функции, но нестатические функции-члены отличаются, и вам нужно & передать адрес.

1

Другие решения

Сообщение об ошибке очень ясно; addTwoNumbers является функцией-членом Demo, а не статическая функция, но вы пытаетесь вызвать ее как статическую функцию. У вас должен быть экземпляр Demo чтобы призвать это.

В твоем случае, addTwoNumbers не обязательно должна быть функцией-членом, поэтому просто сделайте ее статической. Для дальнейшего использования смотрите: http://www.parashift.com/c++-faq/pointers-to-members.html

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector