libxml2中的"BAD_CAST"

从这篇文章开始,本人开始改做VC++了,在学校的时候感觉自己对这个很感兴趣,终于有机会了,不多说,把今天的日志记下吧.

 

在VC++对xml进行操作时,有大概三种方式,我对libxml2的方法比较感兴趣,但是发现一个问题,就是里面有个BAD_CAST,

代码如下:

//定义文档和节点指针 xmlDocPtr doc = xmlNewDoc(BAD_CAST"1.0"); xmlNodePtr root_node = xmlNewNode(NULL,BAD_CAST"root"); //设置根节点 xmlDocSetRootElement(doc,root_node); //在根节点中直接创建节点 xmlNewTextChild(root_node, NULL, BAD_CAST "newNode1", BAD_CAST "newNode1 content"); xmlNewTextChild(root_node, NULL, BAD_CAST "newNode2", BAD_CAST "newNode2 content");

不明白是怎么回事,于是就删除了,这样会出现下面的错误:

Compiling... MyXmlTestDlg.cpp E:/test/TestXml/MyXmlTest/MyXmlTestDlg.cpp(191) : error C2664: 'xmlNewTextChild' : cannot convert parameter 3 from 'char [9]' to 'const unsigned char *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 执行 cl.exe 时出错. MyXmlTest.exe - 1 error(s), 0 warning(s)

这上面的错误说明是数据类型不匹配的问题:

在网上查知:

libxml的api使用 const unsigned char* 。
而string literal 只能隐式转换到 const char*。
所以libxml提供一个BAD_CAST用来作显示转换。

这样可以解释那个问题的出现

你可能感兴趣的:(xml,String,api,null,文档,Types)