私はこのクラスを持っています、
class Base {
public:
void foo();
};
int main()
{
Base b;
}
mainfoo()定義はありませんが、エラーなしでコンパイルされます。しかしb.foo();、コンパイルエラーになります。
さらに、constructorandについてもoperator=、定義せずに宣言するだけで、トリガーしない限りコンパイルされます。
質問
Base繰り返しますが、仮想関数をに追加します。
class Base {
public:
void foo();
virtual void bar(); // no defition is gonna be provided.
};
今、mainコンパイルできません。代わりにエラーが発生します:
Base の vtable への未定義の参照
main以前は呼び出されない限りコンパイルできたので、これは私を少し混乱させますfoo()が、今は追加bar()して、まったく呼び出されません。
この場合、なぜコンパイルされないのですか?