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