Derleyici Uyarısı (düzey 1) C5208 ve Hata C7626
typedef adında kullanılan adsız sınıf statik olmayan veri üyeleri, üye sabit listeleri veya üye sınıfları dışında üyeleri bildiremez
Açıklamalar
Bir typedef
bildirim içindeki adsız sınıfların aşağıdakilerden başka üyesi olamaz:
- varsayılan üye başlatıcısı olmayan statik olmayan veri üyeleri,
- üye sınıfları veya
- üye sabit listeleri.
Aynı kısıtlamalar iç içe geçmiş her sınıfa özyinelemeli olarak uygulanır. Kısıtlama, bağlantı amacıyla adları olan typedef
yapıların basitliğini sağlamaya yöneliktir. Derleyici bağlantı için ada gelmeden önce hiçbir bağlantı hesaplaması gerekmeyen typedef
basit olmaları gerekir.
Bu uyarı Visual Studio 2019 sürüm 16.6'da yenidir. C++ standartları komitesi tarafından bir hata raporu olarak benimsenen P1766R1 bağlı olarak, derleyicinin tüm standart modlarını etkiler. Varsayılan /std:c++14
ve /std:c++17
modlarda, derleyici uyumsuz kod için C5208 uyarısını yayar. belirtilirse /permissive-
, derleyici altında /std:c++14
hata olarak C5208 uyarısını yayar. Derleyici, veya daha sonra belirtildiğinde /std:c++17
uyumlu olmayan kod için C7626 hatasını yayar.
Kod değişikliği olmadan uyarıyı kapatmak için
Pragma#pragma warning(suppress : 5208)
, kullanarak belirli bir kod satırı için uyarıyı warning
kapatabilirsiniz. Uyarı pragması #pragma warning(disable : 5208)
olan öğesini kullanarak bir dosya içindeki uyarıyı da kapatabilirsiniz. /wd5208 komut satırı seçeneğini kullanarak komut satırı derlemelerinde uyarıyı genel olarak kapatabilirsiniz.
Visual Studio IDE'de projenin tamamı için uyarıyı kapatmak için:
- Projeniz için Özellik Sayfaları iletişim kutusunu açın. Özellik Sayfaları iletişim kutusunun nasıl kullanılacağı hakkında bilgi için bkz . Özellik Sayfaları.
- Yapılandırma Özellikleri>C/C++>Gelişmiş sayfasını seçin.
- Eklemek
5208
için Belirli Uyarıları Devre Dışı Bırak özelliğini düzenleyin. Değişikliklerinizi uygulamak için Tamam'ı seçin.
Örnek
Aşağıdaki örnek, adsız yapılarda artık izin verilmeyen yapıları gösterir. Belirtilen standartlar moduna bağlı olarak, C5208 veya C7626 hataları veya uyarıları yayılır:
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;
Yukarıdaki kod, adlandırılmamış sınıfa bir ad vererek düzeltilebilir:
struct Base { };
typedef struct NamedType : Base
{
void fn();
static int i;
struct U {
void f();
};
int j = 10;
} S;
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin