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