gpt4 book ai didi

c++ - RapidXML 编译错误解析字符串

转载 作者:太空狗 更新时间:2023-10-29 20:45:05 40 4
gpt4 key购买 nike

我在使用 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

RapidXML 有四个头文件:

  1. rapidxml_iterators.hpp
  2. rapidxml_print.hpp <--包含错误,但构建成功
  3. rapidxml_utils.hpp <--包含错误,但构建成功
  4. rapidxml.hpp <--程序链接,包含解析函数

我该如何解决我的代码中的错误,我是否首先需要以某种方式解决 header 中的编译器错误?

最佳答案

问题是在 std::string 上调用 c_str() 返回的 char* 实际上是一个 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*parse() 必须采用非常量 char*。希望这可以帮助。至于你的标题,我通常只使用

 rapidxml.hpp
rapidxml_print.hpp

包含在我的源文件中。您没有链接器问题,因为 RapidXML 是仅 header 实现(我认为这很好)。

关于c++ - RapidXML 编译错误解析字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11604818/

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