Bagikan melalui


Compiler Warning (level 4) C4373

'function': fungsi virtual mengambil alih 'base_function', versi kompiler sebelumnya tidak mengambil alih ketika parameter hanya berbeda dengan pengkualifikasi konstan/volatil

Keterangan

Aplikasi Anda berisi metode di kelas turunan yang mengambil alih metode virtual di kelas dasar. Parameter dalam metode penimpaan berbeda dengan const atau volatile kualifikasi dari parameter metode virtual.

Sebelum Visual Studio 2008, pengkompilasi akan mengikat fungsi ke metode di kelas dasar. Versi kompilator yang lebih baru mengabaikan const atau volatile pengkualifikasi, mengikat fungsi ke metode di kelas turunan, lalu mengeluarkan peringatan C4373. Perilaku terakhir sesuai dengan standar C++.

Contoh

Contoh kode berikut menghasilkan peringatan C4373. Untuk mengatasi masalah ini, buat penimpaan menggunakan kualifikasi CV yang sama dengan fungsi anggota dasar. Jika Anda tidak berniat membuat penimpaan, ganti nama fungsi di kelas turunan.

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