直接进入代码:
#define PRO_SIGNAL( func, param ) (*func)(param)
void PRO_SIGNAL( paint[0], Pro_Window* );
signal->paint = realloc( signal->paint, sizeof( void (*)(Pro_Window*) ) * signal->paint_count );
错误:
error: incompatible types when assigning to type 'void (*[])(struct Pro_Window *)' from type 'void *'|
似乎您正在为数组而不是指针赋值。
从您的输出错误消息:
'void (*[])(struct Pro_Window *)' from type 'void *'|
注意这里的[]
(它肯定不是lambda!)而不是*
如果这是一个"可扩展"结构,则需要重新分配整个结构,而不仅仅是数组成员。
顺便说一句:如果realloc失败,它将返回一个NULL指针,如果您将其分配给正在realloc’ed的变量,它所指向的原始内存将永远丢失。因此,总是先将其重新分配到一个临时指针中,检查值,如果有效的话,再分配回原始指针。
您没有向我们展示singal->paint
的定义,但我从错误消息中推断,它被声明为函数指针数组,这意味着signal
是带有flex数组(paint[]
)的struct
。不能分配给数组,需要重新分配整个struct
。
不确定你想做什么,但这在这里非常有效:
#include <stdlib.h>
int main(int argc, char ** argv)
{
void (**foobar) (int a, int b);
void (**tmp) (int a, int b);
foobar = NULL;
if (!(foobar = malloc(sizeof(*foobar)*4))
return 1;
if (!(tmp = realloc(foobar, sizeof(*foobar)*5)) {
free(foobar);
return 1;
} else {
foobar = tmp;
}
free(foobar);
return 0;
}
所以,要么像Kevin所说的那样尝试realloc
一个数组,要么在C++模式下编译,我认为在C++模式中,强制转换不是隐式的。
编辑:我添加了一些错误处理。