Bagikan melalui


Peringatan Pengompilasi C5243

'type': menggunakan kelas 'class-name' yang tidak lengkap dapat menyebabkan pelanggaran ODR karena keterbatasan ABI. Anda dapat mengatasi masalah ini dengan menentukan kata kunci warisan pada deklarasi maju kelas.

Keterangan

Microsoft C++ ABI menggunakan lebih dari satu jenis pointer-to-member. Jenis ini memiliki ukuran berbeda yang bergantung pada model pewarisan yang digunakan oleh kelas. Standar C++ memungkinkan Anda mendeklarasikan pointer-to-member dari jenis kelas yang tidak lengkap. Jika Anda mendeklarasikan variabel jenis pointer-to-member untuk kelas yang tidak lengkap, pengkompilasi harus menggunakan representasi yang paling umum. Ini dapat menyebabkan satu aturan definisi, atau pelanggaran ODR, karena pengkompilasi dapat menggunakan representasi yang lebih kecil dan lebih spesifik untuk jenis pointer-to-member ini di unit terjemahan lain di mana jenis kelas lengkap tersedia.

Untuk mengatasi kesalahan ini, Anda dapat menentukan jenis kelas lengkap sebelum mendeklarasikan variabel pointer-to-member. Atau, gunakan kata kunci pewarisan khusus Microsoft untuk menentukan model pewarisan yang benar pada deklarasi kelas maju yang tidak lengkap.

Compiler Warning C5243 baru di Visual Studio 2019 versi 16.10 dan nonaktif secara default. Untuk informasi selengkapnya tentang cara mengaktifkan peringatan ini, lihat Peringatan pengkompilasi yang nonaktif secara default.

Lihat juga

Kata kunci warisan