在我的代码中,我必须使用lambda等几个函数,例如,您应该提供给qsort
。
所以,当我通过类型int
函数,程序工作正常。但是,当我还添加double
类型的另一个功能,错误消息出现了:解释这个gcc函数的类型化行为
1.c:44:29: error: invalid operands to binary < (have 'double *' and 'double')
从线路:
return (*getter)(a) < target
哪里getter
是指针:
double get_sex(struct human* a) { // it's the second function I've passed
return a->sex;
}
唯一我已经通过的两个功能之间的区别是第一个是int
,第二个是double
。
sometype somefunction (some parameters,
int *comparator(struct human*, double, double *(struct human*)),
double *getter(struct human*)) {
....
}
我开始与sizeof
,发现对其进行检查,以某种方式代码(*getter)(*a)
返回4个字节而不是8,所以它必须是一个指针,而不是双。这就是为什么我有这个错误信息。
我去了Wikipedia为例,发现其他()
。我已经添加了它们,现在它返回8个字节并且正常工作。
double (*getter)(struct human*)) {
所以,问题是:我为什么要加括号周围getter
但不在身边comparator
?函数返回的原因是double
而不是int
?!
这是关于我从来没有听说过的语法细节的东西。
(我用的是我在我已经安装了Windows中发现的编译器 - 从Perl解释草莓)
您应该发布一个显示问题的小型完整示例。答案很可能取决于一个小细节。 –