コンパイラの警告 C4484
'override_function' : 基底 ref クラスのメソッド 'base_class_function' と一致しますが、'virtual'、'new'、または 'override' とマークされていません。('virtual' ではなく) 'new' が必要です
/clr を使用してコンパイルする場合、コンパイラは基底クラスの関数を暗黙的にオーバーライドしません。つまり、関数は vtable に新しいスロットを得ることになります。 解決するには、関数がオーバーライドであるかどうかを明示的に指定します。
詳細については、以下を参照してください:
C4484 は、常にエラーとして表示されます。 C4484 が表示されないようにするには、warning pragma を使用します。
例
次の例では C4484 が生成されます。
// C4484.cpp
// compile with: /clr
ref struct A {
virtual void Test() {}
};
ref struct B : A {
void Test() {} // C4484
};
// OK
ref struct C {
virtual void Test() {}
virtual void Test2() {}
};
ref struct D : C {
virtual void Test() new {}
virtual void Test2() override {}
};