我有一个结构,我曾经用值填充类结构:
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} }
}
答案 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} }
}