Udostępnij za pośrednictwem


Ostrzeżenie kompilatora (poziom 4) C4373

"function": funkcja wirtualna zastępuje "base_function", poprzednie wersje kompilatora nie przesłaniały, gdy parametry różnią się tylko kwalifikatorami const/volatile

Uwagi

Aplikacja zawiera metodę w klasie pochodnej, która zastępuje metodę wirtualną w klasie bazowej. Parametry w metodzie zastępowania różnią się const od parametrów metody wirtualnej lub volatile kwalifikatora.

Przed programem Visual Studio 2008 kompilator powiązałby funkcję z metodą w klasie bazowej. Nowsze wersje kompilatora ignorują const kwalifikator lub volatile , wiążą funkcję z metodą w klasie pochodnej, a następnie wydają ostrzeżenie C4373. Drugie zachowanie jest zgodne ze standardem języka C++.

Przykład

Poniższy przykład kodu generuje ostrzeżenie C4373. Aby rozwiązać ten problem, należy przesłonić użycie tych samych kwalifikatorów CV co funkcja składowa podstawowa. Jeśli nie zamierzasz utworzyć przesłonięcia, zmień nazwę funkcji w klasie pochodnej.

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