編譯程式警告 (層級 4) C4373
'function': 虛擬函式會覆寫 'base_function',舊版編譯程式未覆寫時,只有 const/volatile 限定符的參數不同
備註
您的應用程式在衍生類別中包含方法,這個方法會覆寫基類中的虛擬方法。 覆寫方法中的參數與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