我正在尝试编写一个带有函数指针的映射函数,并将其传递给另一个函数,但是gcc对我大喊大叫。
这是我想要做的事情的想法。
void map(T thing, void apply(int a, int b, void *cl), void *cl);
void function(T thing, void apply(int a, int b, void *cl), void * cl)
{
for(int i = 0; i < 10; i++)
{
map(thing, apply, cl);
}
}
gcc的抱怨:
警告:从不兼容的指针类型
传递'map'的参数2
有什么想法吗?
答案 0 :(得分:4)
为了帮助解决这个问题,我们需要查看map函数的声明/签名。几乎可以肯定,功能签名略有不同。解决这个问题的最简单方法是输入一个函数指针类型并在两个函数中使用它。
typedef void (*apply)(int,int,void*);
答案 1 :(得分:2)
你不能传递函数。您需要将指针传递给函数。
void map(T thing, void (*apply)(int a, int b, void *cl), void *cl);
void function(T thing, void (*apply)(int a, int b, void *cl), void * cl)
{
/* ... */
map(thing, apply, cl);
/* .... */
}
答案 2 :(得分:0)
只是抱怨map
的第二个参数所期望的函数指针类型与apply
的函数指针类型不同。如果你改变了那种类型,或者(如果安全的话),那么它就没事了。
答案 3 :(得分:0)
它适用于gcc 4.3.3和-Wall
。
虽然我认为所有存在的C版本都重写了函数“value”参数作为指针,但你可以使用更传统的声明:
void function(T thing, void (*f)(int a, int b, void *cl), void * cl)
但是,就像我说的那样,你的例子对我来说没问题,除了typedef int T
和map(1, ...)