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

  • Fr. Eckle Studios

    Fr. Eckle St

    29 Kasım 2006
  • RawBrahs

    RawBrahs

    28 Aralık 2010
  • taliajoy18

    taliajoy18

    12 Temmuz 2011