Compartilhar via


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 qualificador ou volatile dos parâmetros do método virtual.

Antes do Visual Studio 2008, o compilador associava 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 com que a substituição use os mesmos qualificadores VC que 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