Чистый виртуальный вызов функции - PullRequest
6 голосов
/ 16 апреля 2011

Я использую boost.python для создания python-модулей, написанных на c ++. У меня есть базовый класс с чисто виртуальными функциями, которые я экспортировал следующим образом:

class Base
{
    virtual int getPosition() = 0;
};

boost::python::class_<Base>("Base")
   .def("GetPosition", boost::python::pure_virtual(&Base::getPosition));

в Python у меня есть код:

class Test(Base):
   def GetPosition(self):
      return 404

Test obj
obj.GetPosition()

RuntimeError: Чистая виртуальная функция с именем

Что не так?

Ответы [ 2 ]

4 голосов
/ 16 апреля 2011

Эта ошибка возникает, когда конструктор или деструктор прямо или косвенно вызывает чистый виртуальный член.

(Помните, что во время выполнения конструктора и деструктора динамический тип является созданным / разрушенным типом, и поэтому виртуальные члены разрешаются для этого типа).

1 голос
/ 16 апреля 2011

«Чистая виртуальная функция» - это функция, которая не имеет определения в базовом классе. Это означает, что все дочерние элементы этого базового класса будут иметь переопределенную реализацию этой функции, но базовый класс не имеет реализации.

В вашем примере похоже, что вы вызываете чисто виртуальную функцию, поэтому вы вызываете функцию, которая объявлена, но, поскольку вы не вызываете реализацию любого дочернего элемента, у нее нет определения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...