вторник, 18 октября 2011 г.

undefined reference to `vtable for


КОД
class A {
public:
  A() {
    // ...
  };
  // имеет виртуальные функции
}

class B : public A {
public:
  B() : A() {
    // ...
  }
  // определяет все виртуальные функции класса А
}


но после успешной компиляции при linkage получаю:

filename.o:filename.cpp:(.text+0x8) undefined reference to `vtable for A`


Обычно это происходит, если какой-то виртуальный метод класса объявлен, но нигде не определён. g++ обычно помещает vtable только в тот объектный файл, где определяется первый виртуальный метод класса, не объявленный как inline


Либо определяем здесь же реализацию виртуальных функций, либо делаем их "чистыми", помечая спецификатором "чистоты" - "=0"


Материал отсюда

Комментариев нет: