我无法弄明白
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);
和我的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);
答案 0 :(得分:4)
它非常不稳定,它希望返回默认的错误处理程序。所以你必须将指针传递给变量。像这样(未经测试):
xmlGenericErrorFunc handler;
initGenericErrorDefaultFunc(&handler);
如果我理解你的意图,这不是你真正想要用来抑制错误的功能。请改用xmlSetGenericErrorFunc()。您可以使用initGenericErrorDefaultFunc()再次还原它。传递NULL。
答案 1 :(得分:0)
您使用xmlGenericErrorFunc *handler
。注意星号。 xmlGenericErrorFunc
已经使用一个进行了类型定义。只需在xmlGenericErrorFunc
之后删除星号,它就已经是一个指针。