【问题标题】:No matching member function for call to child.value没有匹配的成员函数调用 child.value
【发布时间】:2015-06-26 10:22:07
【问题描述】:

当我尝试编译下面的代码时出现错误:

src/main.cpp:51:48: error: no matching member function for call to 'child_value'
                        std::cout << "which has value" << eb.second.child_value(kv.second);
                                                      ~~~~~~~~~~^~~~~~~~~~~

我不明白的是我能够在上面的循环中使用它。我只能假设它希望我改用kv.second.child_value(kv.second);。但是我希望它在 for (auto&amp; eb: mapb) { 返回的 xml 上运行此代码。

#include "pugi/pugixml.hpp"

#include <iostream>
#include <string>
#include <map>

int main()
{

    const std::map<std::string, std::string> tagMap {
        {"description", "content"}, {"url", "web_address"}
    };

    pugi::xml_document doca, docb;
    std::map<std::string, pugi::xml_node> mapa, mapb;

    if (!doca.load_file("a.xml") || !docb.load_file("b.xml")) { 
        std::cout << "Can't find input files";
        return 1;
    }

    for (auto& node: doca.child("data").children("entry")) {
    const char* id = node.child_value("id");
    mapa[id] = node;
    }

    for (auto& node: docb.child("data").children("entry")) {
    const char* idcs = node.child_value("id");
        if (!mapa.erase(idcs)) {
        mapb[idcs] = node;
        }
    }

    // For removed
    for (auto& ea: mapa) {
    std::cout << "Removed:" << std::endl;
    ea.second.print(std::cout);
    }

    // For added nodes
    for (auto& eb: mapb) {
        // Loop through tag map
        for (auto& kv : tagMap) {
            // Try to find the tag name named in second map value
            // and associate it to the type of information in first map value
            std::cout << "Found" << kv.first;
            std::cout << "which has value" << eb.second.child_value(kv.second);
        }
    }

}

如果有人能解释我做错了什么,我将不胜感激。

【问题讨论】:

  • 试试child_value(kv.second.c_str())

标签: c++ xml parsing c++11 xml-parsing


【解决方案1】:

根据here发现的两个重载

// Get child value of current node; that is, value of the first child node of type PCDATA/CDATA
const char_t* child_value() const;

// Get child value of child with specified name. Equivalent to child(name).child_value().
const char_t* child_value(const char_t* name) const;

你需要传递一个指向字符串(或字符串字面量)的指针。

std::cout << "which has value" << eb.second.child_value(kv.second.c_str());
                                                        ^^^^^^^^^^^^^^^^^

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多