簡體   English   中英

錯誤:沒有可行的重載運算符[]

[英]Error: no viable overloaded operator[]

這是我的代碼:

#include "pugi/pugixml.hpp"

#include <iostream>
#include <string>
#include <map>
int main() {
    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"))
        return 1;

    for (auto& node: doca.child("site_entries").children("entry")) {
        const char* id = node.child_value("id");
        mapa[new std::string(id, strlen(id))] = node;
    }

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

編譯時出現此錯誤:

src/main.cpp:16:13: error: no viable overloaded operator[] for type 'std::map<std::string, pugi::xml_node>'
        mapa[new std::string(id, strlen(id))] = node;

您的類型不匹配。 mapa類型:

std::map<std::string, pugi::xml_node> mapa,
         ^^^^^^^^^^^^

但是你在做:

mapa[new std::string(id, strlen(id))] = node;
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
         string*

std::map有兩個operator[]重載:

T& operator[](const Key& );
T& operator[](Key&& );

在您的情況下, Keystd::string 但是,您嘗試傳遞std::string* ,但無法將其轉換為std::string ,因此會收到“沒有可行的重載operator[] ”的錯誤消息。

您的意思是:

mapa[id] = node;

此行的注釋相同:

std::string id = new std::string(idcs, strlen(idcs));

C ++不是Java,您可以這樣做:

std::string id(idcs, strlen(idcs));

或者簡單地:

std::string id = idcs;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM