Aviso do compilador (nível 4) C4373

'function': a função virtual substitui 'base_function', versões anteriores do compilador não substituíam quando parâmetros diferiam apenas em qualificadores const/volatile

Comentários

Seu aplicativo contém um método em uma classe derivada que substitui um método virtual em uma classe base. Os parâmetros no método de substituição diferem por um const ou volatile qualificador dos parâmetros do método virtual.

Antes do Visual Studio 2008, o compilador vinculava a função ao método na classe base. Versões posteriores do compilador ignoram o qualificador const ou volatile, associam a função ao método na classe derivada e emitem o aviso C4373. O último comportamento está em conformidade com o padrão C++.

Exemplo

O exemplo de código a seguir gera o aviso C4373. Para resolver esse problema, faça a substituição usar os mesmos qualificadores CV como a função de membro base. Se você não pretendia criar uma substituição, renomeie a função na classe 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