У меня этот класс,
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()
и он не вызывается вообще.
Почему он не компилируется в этом случае?