Compilerwarnung (Ebene 4) C4373

'function': Virtuelle Funktion setzt 'base_function' außer Kraft, frühere Versionen des Compilers haben nicht außer Kraft gesetzt, wenn Parameter nur von const/volatile Qualifizierern unterschiedlich sind.

Hinweise

Ihre Anwendung enthält eine Methode in einer abgeleiteten Klasse, die eine virtuelle Methode in einer Basisklasse überschreibt. Die Parameter in der Außerkraftsetzungsmethode unterscheiden sich von einem oder volatile einem const Qualifizierer von den Parametern der virtuellen Methode.

Vor Visual Studio 2008 würde der Compiler die Funktion an die Methode in der Basisklasse binden. Spätere Versionen des Compilers ignorieren den const Qualifizierer oder volatile den Qualifizierer, binden die Funktion an die Methode in der abgeleiteten Klasse und geben dann warnung C4373 aus. Das letztere Verhalten entspricht dem C++-Standard.

Beispiel

Im folgenden Codebeispiel wird die Warnung C4373 generiert: Um dieses Problem zu beheben, verwenden Sie die Außerkraftsetzung dieselben CV-Qualifizierer wie die Basiselementfunktion. Wenn Sie keine Außerkraftsetzung erstellen möchten, benennen Sie die Funktion in der abgeleiteten Klasse um.

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