2012-09-20 21 views
17

Bu yasal C++ mı?Başka bir üye bildirirken siz bir üyenin boyutunu kullanabilir misiniz?

GCC 4.6 bunu kabul eder, ancak MSVC 2012'de yoktur. Benim için iyi olmalı gibi görünüyor, ama biraz Googling yardımcı olmadı ve standarda nereye bakacağımı bilmiyorum.

error C2327: 'foo::a' : is not a type name, static, or enumerator 
error C2065: 'a' : undeclared identifier 
error C2070: ''unknown-type'': illegal sizeof operand 
warning C4200: nonstandard extension used : zero-sized array in struct/union 
+0

olası yinelenen: // stackoverflow.com/questions/9656941/why-i-cant-initialize-non-const-static-member-or-static-array-in-class) –

+2

Nihai neden benzer olsa bile, soru bana çok farklı geliyor . – Gorpik

+2

C++ 11 standardındaki ilgili paragraf 5, paragraf 8, bence. – jrok

cevap

18

Bu C++ 03 bu üyeler nonstatic DataMembers çünkü yasadışı oldu: msvc 2012

şu çıktıyı verir.

C++ 11'den başlayarak, bu, yasal olmayan bir işlenende, karşılık gelen bir nesneye sahip olmadan, statik olmayan veri öğelerini kullanabileceğiniz için yasaldır.

1

bu deneyin: Bu MSVC 2010 ve MSVC için geçici bir çözümdür 2012

struct Aoo 
{ 
    typedef int ArrayType; 
    ArrayType a[100]; 
}; 

struct foo : public Aoo 
{ 
    enum {bSize = sizeof(Aoo)/sizeof(Aoo::ArrayType)}; 
    int b[bSize]; 
}; 
[I const olmayan statik üyesi veya sınıfta statik diziyi başlatmak edemez Neden?] (Http
İlgili konular