Предупреждение компилятора (уровень 4) C4373
"function": виртуальная функция переопределяет "base_function", предыдущие версии компилятора не переопределяются, если параметры отличаются только конст/переменными квалификаторами
Замечания
Приложение содержит метод в производном классе, который переопределяет виртуальный метод в базовом классе. Параметры в методе переопределения отличаются или квалификатором const
volatile
от параметров виртуального метода.
До Visual Studio 2008 компилятор привязывает функцию к методу в базовом классе. Более поздние версии компилятора игнорируют const
или volatile
квалификатор, привязывают функцию к методу в производном классе, а затем выдает предупреждение C4373. Последнее поведение соответствует стандарту C++ .
Пример
Следующий пример кода приводит к возникновению ошибки C4373. Чтобы устранить эту проблему, переопределите используйте те же квалификаторы CV-квалификаторов, что и базовая функция-член. Если вы не намеревались создать переопределение, переименуйте функцию в производном классе.
// 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