Share via


Upozornění kompilátoru (úroveň 4) C4373

'function': virtuální funkce přepisuje "base_function", předchozí verze kompilátoru nepřepsaly, pokud se parametry liší pouze pomocí kvalifikátorů const/volatile.

Poznámky

Vaše aplikace obsahuje metodu v odvozené třídě, která přepíše virtuální metodu v základní třídě. Parametry v metodě přepsání se liší podle const parametrů virtuální metody nebo volatile kvalifikátoru.

Před sadou Visual Studio 2008 by kompilátor sváže funkci s metodou v základní třídě. Novější verze kompilátoru const ignorují nebo volatile kvalifikátor, svázat funkci s metodou v odvozené třídě a pak vydat upozornění C4373. Toto chování odpovídá standardu C++.

Příklad

Následující příklad kódu generuje upozornění C4373. Pokud chcete tento problém vyřešit, použijte přepsání stejné kvalifikátory CV jako základní členská funkce. Pokud jste nechtěli vytvořit přepsání, přejmenujte funkci v odvozené třídě.

// 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