編譯器錯誤 C2229
類型 『identifier』 具有不合法的零大小數位
結構或位欄位的成員包含不是最後一個成員的零大小數位。
因為您可以將零大小的陣列當做結構的最後一個成員,因此當您配置結構時,必須指定其大小。
如果零大小的陣列不是結構的最後一個成員,編譯程式就無法計算其餘欄位的位移。
下列範例會產生 C2229:
// C2229.cpp
struct S {
int a[0]; // C2229 zero-sized array
int b[1];
};
struct S2 {
int a;
int b[0];
};
int main() {
// allocate 7 elements for b field
S2* s2 = (S2*)new int[sizeof(S2) + 7*sizeof(int)];
s2->b[6] = 100;
}