2014-02-21 34 views
0

我有一個初始化數組的部分問題,它是結構數組的一部分。 類型struct的是錯誤:'tU8 [0] {又名無符號字符[0]}'的初始化程序太多

typedef stuct { 
    unsigned char myarray[]; 
    bool flag; 
}myStructType; 

我已經建立這種結構類型的陣列,並希望將其初始化

myStructType myStruct[2] = { 
    { 
     {5,6,7}, 
     false 
    }, 
    { 
     {1,2}, 
     true 
    } 
}; 

MYSTRUCT是一個配置結構,我通過所有的具有代碼,用於將環該結構的元素根據init值進行一些操作。

我在Linux嵌入式平臺上使用arm-v5te-linux-gnueabi-g ++編譯器。

的問題是,當我編譯的代碼,我得到以下錯誤

error: too many initializers for 'unsigned char [0]'

任何解決方案? 謝謝

+2

什麼編譯器和平臺?這樣的成員是非標準的。 – Potatoswatter

+0

你不需要在C++中使用'typedef struct {} name'技巧,你只需要'struct name {}'。你應該選擇一種語言或其他語言。 –

+0

如果您使用C++進行編程,並且需要動態調整大小的數組,請使用['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)。 –

回答

0

我不知道一個編譯器,可以讓你有這樣一個struct。它似乎不可能找出如何訪問flag

如果可以,將myarray重構爲另一個鏈接結構。

0

忽略編譯器的問題,可以這樣考慮:

struct myStructType { 
    unsigned char myarray[]; 
    bool flag; 
}; 

myStructType a = { { 5, 6, 7 }, true }; 
myStructType b = { { 1, 2 }, true }; 

什麼是sizeof(myStructType)(或更重要的是,什麼是的flag偏移)?這是無法回答的,因爲這種情況是不可能的。你有幾個選擇。你可以硬編碼爲myarray最大尺寸:

struct myStructType { 
    unsigned char myarray[4]; 
    bool flag; 
}; 

你可以把它的指針,並分別初始化數組:

​​

你可以做上述相同,但使用空值終止字符串而不是:

struct myStructType { 
    unsigned char *myarray; 
    bool flag; 
}; 

unsigned char a[] = "\005\006\007"; 
unsigned char b[] = "\001\002"; 
myStructType myStruct[2] = { { a, true }, { b, false } }; 

或者直接,如果const是確定的myarray

struct myStructType { 
    const unsigned char *myarray; 
    bool flag; 
}; 

myStructType myStruct[2] = { 
    { "\005\006\007", true }, 
    { "\001\002", false } 
}; 

還有其他的選擇。

順便說一句,你不需要在C++中使用typedef struct { } name語法,你可以做struct name { }

+0

事實上,不確定大小的數組允許作爲C中的成員。它們根本不會貢獻'sizeof'。這個技巧在C++中是非法的,但許多編譯器都允許它。但是,在這樣的數組之後聲明一個成員將永遠不會被允許。 – Potatoswatter

相關問題