Share via


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++14hata 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:

  1. 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ı.
  2. Yapılandırma Özellikleri>C/C++>Gelişmiş sayfasını seçin.
  3. Eklemek 5208iç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;