Compiler Warning (level 1) C5208 dan Error C7626
kelas tanpa nama yang digunakan dalam nama typedef tidak dapat mendeklarasikan anggota selain anggota data non-statis, enumerasi anggota, atau kelas anggota
Keterangan
Kelas yang typedef
tidak disebutkan namanya dalam deklarasi tidak boleh memiliki anggota selain:
- anggota data non-statis tanpa penginisialisasi anggota default,
- kelas anggota, atau
- enumerasi anggota.
Batasan yang sama diterapkan secara rekursif ke setiap kelas bertumpuk. Batasan dimaksudkan untuk memastikan kesederhanaan struktur yang memiliki typedef
nama untuk tujuan tautan. Nama harus cukup sederhana sehingga tidak ada penghitungan tautan yang diperlukan sebelum pengompilasi sampai ke nama typedef
untuk tautan.
Peringatan ini baru di Visual Studio 2019 versi 16.6. Berdasarkan P1766R1 yang diadopsi oleh komite standar C++ sebagai laporan cacat, hal ini memengaruhi semua mode standar pengkompilasi. Dalam default /std:c++14
dan /std:c++17
mode, pengkompilasi memancarkan peringatan C5208 untuk kode yang tidak sesuai. Jika /permissive-
ditentukan, pengkompilasi memancarkan peringatan C5208 sebagai kesalahan di bawah /std:c++14
. Pengkompilasi memancarkan kesalahan C7626 untuk kode yang tidak sesuai ketika /std:c++17
atau yang lebih baru ditentukan.
Untuk menonaktifkan peringatan tanpa perubahan kode
Anda dapat menonaktifkan peringatan untuk baris kode tertentu dengan menggunakan warning
pragma, #pragma warning(suppress : 5208)
. Anda juga dapat menonaktifkan peringatan dalam file dengan menggunakan pragma peringatan, #pragma warning(disable : 5208)
. Anda dapat menonaktifkan peringatan secara global dalam build baris perintah dengan menggunakan opsi baris perintah /wd5208 .
Untuk menonaktifkan peringatan untuk seluruh proyek di IDE Visual Studio:
- Buka dialog Halaman Properti untuk proyek Anda. Untuk informasi tentang cara menggunakan dialog Halaman Properti, lihat Halaman Properti.
- Pilih halaman Properti>Konfigurasi C/C++>Tingkat Lanjut.
- Edit properti Nonaktifkan Peringatan Tertentu untuk menambahkan
5208
. Pilih OK untuk menerapkan perubahan Anda.
Contoh
Sampel berikut menunjukkan konstruksi yang tidak lagi diizinkan dalam struktur yang tidak disebutkan namanya. Tergantung pada mode standar yang ditentukan, kesalahan atau peringatan C5208 atau C7626 akan muncul:
struct Base { };
typedef struct : Base // inheriting from 'Base'; ill-formed
{
void fn(); // ill-formed
static int i; // ill-formed
struct U {
void f(); // nested class has non-data member; ill-formed
};
int j = 10; // default member initializer; ill-formed
} S;
Kode di atas dapat diperbaiki dengan memberi nama kelas yang tidak disebutkan namanya:
struct Base { };
typedef struct NamedType : Base
{
void fn();
static int i;
struct U {
void f();
};
int j = 10;
} S;
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk