Aracılığıyla paylaş


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