直接进入代码:
#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 *'|发布于 2012-02-02 01:46:06
看起来你赋值给一个数组,而不是一个指针。
从您的输出错误消息:
'void (*[])(struct Pro_Window *)' from type 'void *'| 注意这里的[] (它肯定不是一个lambda!)而不是*
如果这是一个“可扩展”的结构,你需要重新锁定整个结构,而不仅仅是数组成员。
顺便提一下,提示:如果realloc失败,它会返回一个空指针,如果你将它赋值给被重新分配的变量,它所指向的原始内存将永远丢失。所以,总是先重新分配到一个temp中,检查它的值,然后赋值回原来的指针,如果它有效的话。
发布于 2012-02-02 01:08:29
您没有向我们展示singal->paint的定义,但是我从错误消息中推断出它被声明为一个函数指针数组,这意味着signal是一个带有flex数组的struct (paint[])。你不能赋值给一个数组,你需要重新分配整个struct。
发布于 2012-02-02 01:14:00
不知道你想要做什么,但这在这里非常有效:
#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++模式下编译,我相信这种转换不是隐式的。
编辑:我添加了一些错误处理。
https://stackoverflow.com/questions/9099973
复制相似问题