Advertencia del compilador (nivel 4) C4373
"function": la función virtual invalida "base_function", las versiones anteriores del compilador no realizaban una invalidación cuando los parámetros solo se diferenciaban en los calificadores const y volatile
Comentarios
La aplicación contiene un método en una clase derivada que invalida un método virtual en una clase base. Los parámetros del método de invalidación difieren por un const
calificador o volatile
de los parámetros del método virtual.
Antes de Visual Studio 2008, el compilador enlazaría la función al método de la clase base. Las versiones posteriores del compilador omiten el calificador const
o volatile
, enlazan la función al método en la clase derivada y, luego, emiten la advertencia C4373. Este último comportamiento se ajusta al estándar de C++.
Ejemplo
El siguiente código de ejemplo genera la advertencia C4373. Para resolver este problema, haga que la invalidación use los mismos calificadores CV que la función miembro base. Si no tenía intención de crear una invalidación, cambie el nombre de la función en la clase derivada.
// 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