Compartir a través de


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