分享方式:


編譯程式警告 (層級 4) C4373

'function': 虛擬函式會覆寫 'base_function',舊版編譯程式未覆寫時,只有 const/volatile 限定符的參數不同

備註

您的應用程式在衍生類別中包含方法,這個方法會覆寫基類中的虛擬方法。 覆寫方法中的參數與constvolatile虛擬方法的參數不同。

在 Visual Studio 2008 之前,編譯程式會將 函式系結至基類中的方法。 較新版本的編譯程式會忽略 constvolatile 限定符,將函式系結至衍生類別中的 方法,然後發出警告 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