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

Posted

技术标签:

【中文标题】没有匹配的成员函数调用 child.value【英文标题】:No matching member function for call to 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()) 【参考方案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());
                                                        ^^^^^^^^^^^^^^^^^

【讨论】:

以上是关于没有匹配的成员函数调用 child.value的主要内容,如果未能解决你的问题,请参考以下文章

C++ - 没有匹配的成员函数调用“push_back”

Qt invokeMethod 异步调用

C++ 指向具有匹配函数签名的任何类的成员函数的指针

mysql udf函数怎么调用

C++中的派生类,可以不定义对象直接调用基类的成员和调用自己的成员函数嘛???

rcpp中没有匹配的调用函数