在结构中创建未知数据类型数组?

时间:2011-09-20 18:15:37

标签: c++

我有一个结构,我曾经用值填充类结构:

MyType structMy[] =
{
  { START,  INTEGER_TYPE, 3, (void *)&classStart->statusStart.set    },
  { STABLE, CHAR_TYPE,    5, (void *)&classtStable->statusStable.set },
  { STOP,   DOUBLE_TYPE,  1, (void *)&classStop->statusStop.set      }
}

但是对于测试和验证,我想在结构中添加测试用例:一些值取决于每行定义的数据类型和值的数量。

但由于结构设置和1值或数组,我认为我需要一个(void *)。但编译器不喜欢它。如何将数组写入数据类型可以更改的结构中呢?

MyType structMy[] =
{
  { START,  INTEGER_TYPE, 3,  (void*){0, 1, 2}                 },
  { STABLE, CHAR_TYPE,    5,  (void*){'A', 'B', 'C', 'D', 'E'} },
  { STOP,   DOUBLE_TYPE,  1,  (void*){2.4}                     }
}

2 个答案:

答案 0 :(得分:1)

编译器需要指针,所以尝试在别处声明数据:

int is[] = {0, 1, 2};
char cs[] = {'A', 'B', 'C', 'D', 'E'};
double ds[] = {2.4};

MyType structMy[] =
{
     {START, INTEGER_TYPE, 3,  (void*)is },
     {STABLE, CHAR_TYPE, 5,  (void*)cs },
     {STOP, DOUBLE_TYPE, 1,  (void*)ds }
}

答案 1 :(得分:0)

通过告诉编译器期望的类型,可以这样做:

MyType structMy[] =
{
   { START,  INTEGER_TYPE, 3,  (void*)(int[]){0, 1, 2}                  },
   { STABLE, CHAR_TYPE,    5,  (void*)(char[]){'A', 'B', 'C', 'D', 'E'} },
   { STOP,   DOUBLE_TYPE,  1,  (void*)(double[]){2.4}                   }
}