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