我在使用 RapidXML 解析字符串时遇到了一些问题。我从 Eclipse 中收到一条错误,声称解析函数不存在。
make all
Building file: ../search.cpp
Invoking: Cross G++ Compiler
g++ -DDEBUG -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"search.d" -MT"search.d" -o "search.o" "../search.cpp"
../search.cpp: In function ‘void search(CURL*, CURLcode, std::string, std::string)’:
../search.cpp:29:27: error: no matching function for call to ‘rapidxml::xml_document<>::parse(const char*)’
../search.cpp:29:27: note: candidate is:
../rapidxml-1.13/rapidxml.hpp:1381:14: note: template<int Flags> void rapidxml::xml_document::parse(Ch*) [with int Flags = Flags, Ch = char]
make: *** [search.o] Error 1
以下代码会引发错误:
rapidxml::xml_document<> doc; // This has no errors
doc.parse<0>(data.c_str()); // This line raises the error (data is a string)
供参考的是在线文档:http://rapidxml.sourceforge.net/manual.html#namespacerapidxml_1parsing http://rapidxml.sourceforge.net/manual.html#namespacerapidxml_1parsing
RapidXML 有四个头文件:
- rapidxml_iterators.hpp
- rapidxml_print.hpp
- rapidxml_utils.hpp
- rapidxml.hpp
如何解决代码中的错误,我是否首先需要以某种方式解决标头中的编译器错误?
问题是char*
从呼叫中返回c_str()
on a std::string
实际上是一个const char*
这对解析函数没有好处(解析实际上改变了它在rapidXML中解析的字符串)。这意味着我们需要在解析字符串之前复制它
xml_document<> doc;
string str; // String you want to parse
char* cstr = new char[str.size() + 1]; // Create char buffer to store string copy
strcpy (cstr, str.c_str()); // Copy string into char buffer
doc.parse<0>(cstr); // Pass the non-const char* to parse()
// Do stuff with parsing
delete [] cstr; // free buffer memory when all is finished
我没有尝试编译上面的内容,所以可能会有错误,重点是c_str()
返回一个const char*
and parse()
必须采取非常量char*
。希望这可以帮助。至于你的标题,我通常只使用
rapidxml.hpp
rapidxml_print.hpp
包含在我的源文件中。您没有链接器问题,因为 RapidXML 是仅标头实现(在我看来,这使它很好)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)