Поделиться через


Предупреждение компилятора C4484

"override_function": соответствует методу класса base ref "base_class_function", но не помечен как "virtual", "new" или "override"; Предполагается, что "new" (и не "virtual" )

При компиляции с помощью /clr компилятор не будет неявно переопределять функцию базового класса, что означает, что функция получит новый слот в vtable. Чтобы устранить проблему, явным образом укажите, является ли функция переопределением.

Дополнительные сведения см. в разделе:

C4484 всегда выдается как ошибка. Используйте предупреждение pragma для подавления C4484.

Пример

Следующий пример приводит к возникновению ошибки 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 {}
};