- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在使用 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 有四个头文件:
我该如何解决我的代码中的错误,我是否首先需要以某种方式解决 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/
我正在使用 RapidXML 读取 XML 文件、解析它、执行一些操作并将其写回。 标签内任何用引号书写的文本,都以扩展形式用引号打印。 是否有任何标志可以防止引号和其他特殊字符的扩展。 欢迎任何建议
今天我试图从我的项目中查找内存泄漏然后我遇到了下面的示例代码 std::string VersionValue("1.0"); std::string EncodingValue("UTF-8");
我最近一直在使用 Rapidxml 并遇到了以下问题。当我尝试添加属性时,这些属性不是硬编码的,而是在程序运行时生成的,rapidxml 插入了错误的字符。 这是我的代码示例: void Pro
我是 rapidXML 的新手,但第一印象并不积极,我制作了简单的 Visual Studio 6 C++ Hello World 应用程序并将 RapidXML hpp 文件添加到项目和 main.
ifstream fin("tree.xml"); if (fin.fail()) return 1; fin.seekg(0, ios::end); size_t lengt
我过去使用 RapidXML 时遇到了几个问题,但这个问题让我很困惑。 我正在创建应用程序事件时间戳的日志,外部程序可以在重播中读取在正确时间发生在原始应用程序中的任何音频。 在应用程序初始化时,会正
因此,我最近掌握了 RapidXML,将其用作在我的程序中解析 XML 的一种方式,我一直主要将其用作一种乱七八糟的方式,但我遇到了一些非常奇怪的问题,我真的很挣扎追查。试着和我一起解决这个问题,因为
我正在使用 RapidXML 来解析一个 xml 字符串。这是我的字符串: std::string str(" 2016-10-18T08:51:50.657+01:0000 "); 下面是我尝试解析
我试图以一种肮脏的方式使用 rapidxml 附加一个非常大的子树,利用 value 方法 rapidxml::xml_node<>* node = allocate_node(rapidxml::n
因此,在 RapidXML 中,我试图遍历我的文件以从某些 tileset 节点获取数据: rapidxml::xml_node<> *root_node = doc.first_node("map"
我正在使用 RapidXML 解析一个 xml 文件,其中包含一些我想在我的 C++ 程序中使用的变量。我能够读取有效节点,但我想添加一些错误处理,例如,如果节点名称拼写错误。 这是我的文件的一个工作
我在 PC 上的 VS2012 中使用 rapidXML 和 C++。我已经解析了 XML 文件,但现在我想单独打印出属性值。我通常可以使用下面的代码来做到这一点。但是,此方法需要知道节点名称和属性名
使用 RapidXML 我需要创建和销毁大量 XML 节点和 XML 属性。我在内存池文档中读到,没有办法使用 allocate_string 函数释放在内存池中创建的单个字符串。 但是这样内存池的大
RapidXml 的文档说 Pool maintains RAPIDXML_STATIC_POOL_SIZE bytes of statically allocated memory. Until s
我在使用 RapidXML 解析字符串时遇到了一些问题。我从 Eclipse 中收到一个错误,声称解析函数不存在。 make all Building file: ../search.cpp Invo
我有一个非常恼人的问题,我花了很多时间来解决它。我在 C++ 中使用 rapidXML 来解析 XML 文件: xml_document<> xmlin; stringstream input; //
我自己研究了 rapidXML 源代码并设法读取了一些值。现在我想更改它们并将它们保存到我的 XML 文件中: 解析文件并设置指针 void SettingsHandler::getConfigFil
我在我的一个项目中一直在使用 RapidXML。一切都很顺利,直到我决定用它来写出 xml。我的代码或多或少如下: //attempt to open the file for writing std
我正在尝试使用 C++ 应用程序中的 RapidXML 库在控制台中打印 XML 文档数据。 我正在遵循 RapidXML 手册 link here ,但我遇到了编译时错误。 这是我的 C++ 代码:
我有一个 XML 文件,我应该使用 RapidXML 和 C++ 对其进行解析。该文件是系统发育树。每个节点都有一个包含 1-3 个子节点的节点,每个子节点都有值。节点可以是学名、通用名或等级。我的问
我是一名优秀的程序员,十分优秀!