Condividi tramite


Avviso del compilatore (livello 4) C4373

'function': la funzione virtuale esegue l'override di 'base_function', le versioni precedenti del compilatore non hanno eseguito l'override quando i parametri differiscono solo per i qualificatori const/volatile

Osservazioni:

L'applicazione contiene un metodo in una classe derivata che esegue l'override di un metodo virtuale in una classe base. I parametri nel metodo di override differiscono da un const qualificatore o volatile dai parametri del metodo virtuale.

Prima di Visual Studio 2008, il compilatore associava la funzione al metodo nella classe base. Le versioni successive del compilatore ignorano il const qualificatore o volatile , associano la funzione al metodo nella classe derivata, quindi generano l'avviso C4373. Il secondo comportamento è conforme allo standard C++.

Esempio

L'esempio di codice seguente genera l'avviso C4373. Per risolvere questo problema, fare in modo che l'override usi gli stessi qualificatori CV della funzione membro di base. Se non si intende creare un override, rinominare la funzione nella classe derivata.

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