所以通常我会声明任何这样的函数指针:
typedef size_t (*hash_function)(const int *);
然后在另一个函数
中使用它HashTable *hash_table_create(const hash_function hash)
所以对于任何满足hash_function定义的函数,如
size_t hash_modulo(const int *parameters)
size_t hash_universal(const int *parameters)
...
我可以将它们用作参数
hash_table_create(hash_modulo)
问题是:我的IDE(Clion)抱怨这种情况下的参数不匹配(代码工作正常)。具体而言,它似乎不接受将hash_function
作为参数类型传递,但如果我使用size_t (*hash_function)(const int *)
则会接受。我在这里错过了什么?
我的代码是正确的,我的IDE是错误的,反之亦然?
提前致谢!
编辑1:确切的错误消息是:Types 'hash_function' and size_t(const int *)' are not compatible
编辑2:这似乎是一个Clion Bug
答案 0 :(得分:3)
CLion似乎有一个错误(可能)。函数名称的类型为size_t(const int *)
。现在,由于函数可以隐式转换为函数指针,因此您的代码完全有效C。
CLion语法检查器可能不会考虑隐式转换。如果从函数名中明确获得函数指针,则错误应该消失:
hash_table_create(&hash_modulo); // Note the ampersand
答案 1 :(得分:2)
我认为问题在于您//to_f is for float
salary= 2921.9121
puts salary.to_f.round(2) // to 2 decimal place
puts salary.to_f.round() // to 3 decimal place
函数为typedef
const
以及您要作为HashTable *hash_table_create(const hash_function hash)
放入的其他功能未声明为parameters
const
编辑:
这在CodeBlocks中运行良好
改变这个:
size_t hash_modulo(const int *parameters)
size_t hash_universal(const int *parameters)
进入这个:
size_t hash_modulo(const int *parameters)
size_t hash_universal(const int *parameters)
然后这工作正常:
hash_function hash_modulo;
hash_function hash_universal;
以下评论中的说明。