Derleyici Uyarısı (düzey 4) C4373
'function': sanal işlev 'base_function' geçersiz kılar, parametreler yalnızca sabit/geçici niteleyicilerle farklılık gösterdiğinde derleyicinin önceki sürümleri geçersiz kılmadı
Açıklamalar
Uygulamanız, türetilmiş bir sınıfta bir temel sınıftaki sanal yöntemi geçersiz kılan bir yöntem içeriyor. Geçersiz kılma yöntemindeki parametreler, sanal yöntemin parametrelerinden bir const
veya volatile
niteleyicisine göre farklılık gösterir.
Visual Studio 2008'in öncesinde, derleyici işlevi temel sınıftaki yöntemine bağlar. Derleyicinin sonraki sürümleri veya volatile
niteleyicisini const
yoksayar, işlevi türetilmiş sınıftaki yöntemine bağlar ve ardından C4373 uyarısını verir. İkinci davranış C++ standardına uygundur.
Örnek
Aşağıdaki kod örneği uyarı C4373 oluşturur. Bu sorunu çözmek için geçersiz kılmanın temel üye işleviyle aynı CV niteleyicilerini kullanmasını sağlayın. Geçersiz kılma oluşturmayı amaçlamadıysanız, türetilmiş sınıftaki işlevi yeniden adlandırın.
// c4373.cpp
// compile with: /c /W3
#include <stdio.h>
struct Base
{
virtual void f(int i) {
printf("base\n");
}
};
struct Derived : Base
{
void f(const int i) { // C4373
printf("derived\n");
}
};
int main()
{
Derived d;
Base* p = &d;
p->f(1);
}
derived