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