У меня этот класс,
class Base {
public:
void foo();
};
int main()
{
Base b;
}
main будет компилироваться без ошибок, хотя foo() не имеет определения. Но b.foo(); приведет к ошибке компиляции.
Более того, даже для constructor и operator= я могу просто объявить их без их определения, он будет компилироваться до тех пор, пока я их не запускаю.
Вопрос
Опять же, я добавляю виртуальную функцию в Base,
class Base {
public:
void foo();
virtual void bar(); // no defition is gonna be provided.
};
Теперь main не может скомпилироваться, вместо этого я получаю сообщение об ошибке:
undefined reference to vtable for Base
Ну, это немного смущает меня, потому что раньше main мог компилироваться до тех пор, пока foo() не вызывается, но теперь я добавляю bar() и он не вызывается вообще.
Почему он не компилируется в этом случае?