gpt4 book ai didi

c - 应为 'void (**)(void *, const char *)' 但参数类型为 'void (*)(void *, const char *)

转载 作者:行者123 更新时间:2023-11-30 21:41:52 30 4
gpt4 key购买 nike

我不明白什么

void (**)(void *, const char *)
/* ^^ why are there 2 asterisks here?

意思是,它是一个指向函数的指针,但我失败了

确切的错误消息是

expected 'void (**)(void *, const char *)' but argument is of type 'void (*)(void *, const char *)'      
initGenericErrorDefaultFunc (xmlGenericErrorFunc *handler);
^
/usr/include/libxml2/libxml/xmlerror.h:866:

这是libxml2中默认的错误消息函数,我尝试调用的函数是

initGenericErrorDefaultFunc (xmlGenericErrorFunc *handler);

我的处理程序参数函数是

void
skipErrorPrinting(void *ctx, const char *msg, ...)
{
}

然后我像这样调用initGenericErrorDefaultFunc()

initGenericErrorDefaultFunc(skipErrorPrinting);

这里是 xmlGenericErrorFunc

的定义
typedef void (XMLCDECL *xmlGenericErrorFunc) (void *ctx,
const char *msg,
...) LIBXML_ATTR_FORMAT(2,3);

最佳答案

它非常奇怪,它想要返回默认的错误处理程序。所以你必须传递一个指向变量的指针。像这样(未经测试):

xmlGenericErrorFunc handler;
initGenericErrorDefaultFunc(&handler);

如果我正确理解你的意图,这不是你真正想要用来抑制错误的函数。请改用 xmlSetGenericErrorFunc()。您可以使用 initGenericErrorDefaultFunc() 再次恢复它。传递 NULL。

关于c - 应为 'void (**)(void *, const char *)' 但参数类型为 'void (*)(void *, const char *),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28417856/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com