这是我的一些代码:
#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;
}
}
Run Code Online (Sandbox Code Playgroud)
编译时我收到此错误:
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;
Run Code Online (Sandbox Code Playgroud)
您的类型不匹配.mapa是类型:
std::map<std::string, pugi::xml_node> mapa,
^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
但你在做:
mapa[new std::string(id, strlen(id))] = node;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
string*
Run Code Online (Sandbox Code Playgroud)
std::map有两个重载operator[]:
T& operator[](const Key& );
T& operator[](Key&& );
Run Code Online (Sandbox Code Playgroud)
在你的情况下,Key是std::string.但是你试图传入std::string*,没有转换std::string- 因此你得到一个"没有可行的重载operator[]" 的错误.
你打算做的是:
mapa[id] = node;
Run Code Online (Sandbox Code Playgroud)
对此行的评论相同:
std::string id = new std::string(idcs, strlen(idcs));
Run Code Online (Sandbox Code Playgroud)
C++不是Java,你只需:
std::string id(idcs, strlen(idcs));
Run Code Online (Sandbox Code Playgroud)
或者干脆:
std::string id = idcs;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13927 次 |
| 最近记录: |