Avertissement du compilateur (niveau 4) C4373

'function' : la fonction virtuelle remplace 'base_function', les versions précédentes du compilateur n’ont pas été remplacées lorsque les paramètres diffèrent uniquement par les qualificateurs const/volatiles

Notes

Votre application contient une méthode dans une classe dérivée qui remplace une méthode virtuelle dans une classe de base. Les paramètres de la méthode de substitution diffèrent d’un ou volatile d’un const qualificateur des paramètres de la méthode virtuelle.

Avant Visual Studio 2008, le compilateur lierait la fonction à la méthode dans la classe de base. Les versions ultérieures du compilateur ignorent le ou volatile le const qualificateur, lient la fonction à la méthode dans la classe dérivée, puis émettez l’avertissement C4373. Ce dernier comportement est conforme à la norme C++.

Exemple

L’exemple de code suivant génère l’avertissement C4373. Pour résoudre ce problème, utilisez les mêmes qualificateurs CV que la fonction membre de base. Si vous n’avez pas l’intention de créer un remplacement, renommez la fonction dans la classe dérivée.

// 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