我有一些使用GMP的代码,它可以用g ++进行编译和运行。
...
// get ptrs to GMP memory management functions
void *(*alloc_func_ptr) (size_t);
void *(*free_func_ptr) (void *, size_t);
mp_get_memory_functions(&alloc_func_ptr, NULL, &free_func_ptr);
...
但是当我使用最新的clang ++编译它时会抛出此错误
gmpxx_boost_serialization.h:127: error: no matching function for call to '__gmp_get_memory_functions'
mp_get_memory_functions(&alloc_func_ptr, NULL, &free_func_ptr);
其中 mp_get_memory_functions 是一个宏
#define mp_get_memory_functions __gmp_get_memory_functions
__GMP_DECLSPEC void mp_get_memory_functions (void *(**) (size_t),
void *(**) (void *, size_t, size_t),
void (**) (void *, size_t)) __GMP_NOTHROW;
为什么clang抱怨?
答案 0 :(得分:2)
尝试改变:
void *(*free_func_ptr) (void *, size_t);
为:
void (*free_func_ptr) (void *, size_t);
根据声明,“mp_get_memory_functions”的第三个参数是函数指针的地址(函数返回“void”而不是“void *”)