Простое наследование получает ошибку Vtable - PullRequest
0 голосов
/ 18 октября 2011

Итак, я пытаюсь скомпилировать этот простой код:

// In Test.h
#include <iostream>
using namespace std;

class A{

public:
    virtual string f (string&);
};

class B : public A{

public:
    B (string);
    string f (string&);
};

// In Test.cpp
#include <iostream>
#include "Test.h"
using namespace std;


B :: B (string row){
    cout << "HERE";
}

string B :: f (string& x){
    cout << "Test";
}

Это кажется достаточно простым, но я продолжаю получать ошибку Undefined reference to 'vtable for A' (компилятор MINGW с Eclipse IDE). Когда я беру реализацию конструктора для B, код компилируется нормально. Чего мне не хватает или это ошибка компоновщика?

1 Ответ

1 голос
/ 18 октября 2011

Я думаю, что вы должны либо сделать A::f(string&) реферат, написав = 0 в конце декларации, либо фактически предоставить реализацию A::f

Поскольку в настоящее время виртуальная функция A::f не существует, компилятор не может создать для нее vtable (таблицу виртуальных функций).

...