Следующий фрагмент кода дает мне ошибку
неопределенная ссылка на `vtable for Derived'
Код :
#include <iostream>
class base{
public:
base(){}
virtual ~base(){}
virtual void test()
{
}
};
class Derived:public base{
public:
Derived(){}
~Derived(){}
void test();
};
int main() {
base* b = new Derived ();
delete b;
}
как я понимаю, это связано с тем, что виртуальная функция test
объявлена, но не определена в class Derived
.
Но когда я компилирую с g++ -c file.cpp
в соответствии с этим C скомпилируйте или соберите исходные файлы, но не связывайте. Он не дает мне никаких ошибок и компилируется нормально. Следовательно, указанная выше ошибка генерируется во время связывания, а не во время компиляции. Из того, что я узнал, не было создано vtable
во время компиляции. Тогда почему я не получаю ошибку во время компиляции?
file.cpp
ошибки нет, потому что виртуальная таблица может быть найдена в другом блоке, и только когда вы доберетесь до компоновки, компоновщик увидит, что ее нет ни в одном блоке. - person M.M   schedule 19.11.2016