错误:'tU8 [0] {aka unsigned char [0]}'的初始化程序太多

时间:2014-02-21 08:12:25

标签: c++ arrays initialization

我有一个初始化数组的问题,该数组是结构数组的一部分。 结构的类型是

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 ++编译器。

问题是当我编译代码时,我收到以下错误

  

错误:'unsigned char [0]'

的初始化程序太多

任何解决方案? 感谢

2 个答案:

答案 0 :(得分:0)

我不知道一个允许你拥有这样一个struct的编译器。它似乎不可能弄清楚如何访问flag

如果可以,请将myarray重构为另一个链接的结构。

答案 1 :(得分: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[] = { 5, 6, 7 };
unsigned char b[] = { 1, 2 };
myStructType myStruct[2] = { { a, true }, { b, false } };

您可以执行与上面相同的操作,但使用以null结尾的字符串:

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 { }