Erreur: pas viable surcharge de l'opérateur[]
C'est un peu mon code:
#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;
}
}
Lors de la compilation, j'obtiens cette erreur:
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;
new std::string...
-->std::string
- Êtes-vous java homme? Parce que je pense que le langage Java ici:
std::string id = new std::string(idcs, strlen(idcs));
. Vous n'avez pasnew
locales les variables en C++. - De nos jours, vous n'avez pas
new
rien en C++.
Vous devez vous connecter pour publier un commentaire.
Vous avez une incompatibilité de type.
mapa
est de type:Mais vous êtes en train de faire:
std::map
a deux surcharges deoperator[]
:Dans votre cas,
Key
eststd::string
. Mais vous êtes en essayant de passer dansstd::string*
, pour qui il n'y a pas de conversion àstd::string
- d'où vous obtenez une erreur "non viable surchargéoperator[]
".Ce que vous vouliez faire, c'était:
Même commentaire pour cette ligne:
C++, Java n'est pas, vous venez de le faire:
ou tout simplement:
src/main.cpp:21:24: error: use of undeclared identifier 'idcs' std::string id(idcs, strlen(idcs)); ^ src/main.cpp:23:24: error: use of undeclared identifier 'node' mapb[id] = node;
Est-ce lié au nouveau code ou est-ce une question distincte?const char* idcs = node.child_value("id");
)?