没有匹配的成员函数来调用child.value

时间:2015-04-19 20:07:37

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

当我尝试编译下面的代码时,我收到一个错误:

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& 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);
        }
    }

}

如果有人能解释我做错了什么,我真的很感激。

1 个答案:

答案 0 :(得分:5)

根据找到的两个重载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());
                                                        ^^^^^^^^^^^^^^^^^