Bagikan melalui


Compiler Warning (level 1) C4462

tidak dapat menentukan GUID tipe. Program mungkin gagal pada waktu proses.

Peringatan C4462 terjadi di aplikasi atau komponen Windows Runtime ketika publik TypedEventHandler memiliki sebagai salah satu parameter jenisnya referensi ke kelas penutup.

Peringatan ini secara otomatis dipromosikan ke kesalahan. Jika Anda ingin mengubah perilaku ini, gunakan peringatan #pragma. Misalnya, untuk membuat C4462 menjadi masalah peringatan tingkat 4, tambahkan baris ini ke file kode sumber Anda:

#pragma warning(4:4462)

Contoh

Sampel ini menghasilkan peringatan C4462:

namespace N
{
    public ref struct EventArgs sealed {};
    public ref struct R sealed
    {
        R() {}
        event Windows::Foundation::TypedEventHandler<R ^, EventArgs^>^ e;
    };
}

[Platform::MTAThread]
int main()
{
    auto x = ref new N::R();
}

Ada dua cara untuk mengatasi kesalahan. Salah satu cara, yang ditunjukkan dalam contoh berikutnya, adalah dengan memberikan aksesibilitas internal peristiwa sehingga tersedia untuk kode dalam executable yang sama tetapi tidak untuk mengodekan di komponen Windows Runtime lainnya.

internal:
    event Windows::Foundation::TypedEventHandler<R ^, EventArgs^>^ e;

Jika acara harus bersifat publik, maka Anda dapat menggunakan solusi lain, yaitu mengeksposnya melalui antarmuka default:

ref struct R;
public interface struct IR{ event Windows::Foundation::TypedEventHandler<R ^, EventArgs^>^ e;};

public ref struct R sealed : [Windows::Foundation::Metadata::Default] IR
{
    R() {}
    virtual event Windows::Foundation::TypedEventHandler<R ^, EventArgs^>^ e;
};

GUID jenis Windows::Foundation::TypedEventHandler<R^, EventArgs^>^ hanya digunakan ketika jenis diakses dari komponen lain. Solusi pertama berfungsi karena hanya dapat diakses dalam komponennya sendiri setelah solusi. Jika tidak, kompilator harus mengasumsikan kasus terburuk dan memancarkan peringatan.