SORU
2 Mart 2015, PAZARTESİ


C'In diğer unsuru boyutu dayalı Birliği öğe boyutu

Kod: aşağıdaki parça düşünün

struct S
{
    union
    {
        int arr1[10];
        char arr2[sizeof(arr1)];
    };
};

Başarıyla c 03 c 11 modunda 4.9.2 gcc ile derler. S gibi şablon olarak değiştirdiğimde ancak:

template <size_t N>
struct S
{
    union
    {   
        int arr1[N];
        char arr2[sizeof(arr1)];
    };  
};

Şu hata çıktısını alıyorum:

error: int S<10ul>::<anonymous union>::arr1 [10]’ is inaccessible

int arr1[N];

error: within this context

char arr2[sizeof(arr1)];

Çınlama c 11 modunda her iki sürümü de derler. Ne doğru davranış burada olduğunu merak ediyorum. arr2 sizeof(int) * N olduğunu açıkça belirtmelidir ben belki?

CEVAP
2 Mart 2015, PAZARTESİ


Sendika anonim. Böylece, derleyici arr1 ve sınıf düzeyinde arr2 oluşturur.
Bu, char arr2[sizeof(arr1)]; arr1 düzgün bakın olmaz çünkü.

İşte bir çözüm :

template <size_t N>
struct S
{
    union A
    {   
        int arr1[N];
        char arr2[sizeof(arr1)];
    };  
};

Derler burada : https://ideone.com/JcvOYg

Birliği belirtilerek, doğrudan dahil derleyici engelleyebiliriz. Sonra arr1 düzgün bir şekilde almak mümkün.

Ama arr1 arr2 S'nin üyeleri artık değil. bu da demek oluyor

Son olarak, Members can be defined in terms of other members ama ikincisi "" derleyici tarafından. kolay bulunabilir olmalı

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 07cadikiz07

    07cadikiz07

    17 EKİM 2007
  • J Medema

    J Medema

    11 EKİM 2006
  • World Science Festival

    World Scienc

    1 Mayıs 2008