C++ 错误:映射c+;中的运算符=不匹配+;

C++ 错误:映射c+;中的运算符=不匹配+;,c++,map,rapidxml,C++,Map,Rapidxml,我正在尝试从XML文件导入数据并将其保存在5D映射中 // declaration of the map map<char *, map<char *, map<char*, map<char *, map<char*, map<char*, char*, cmp_str>, cmp_str>, cmp_str>, cmp_str>, cmp_str>, cmp_str> XmlData; //地图的声明 地图数据

我正在尝试从XML文件导入数据并将其保存在5D映射中

// declaration of the map
    map<char *, map<char *, map<char*, map<char *, map<char*, map<char*, char*, cmp_str>, cmp_str>, cmp_str>, cmp_str>, cmp_str>, cmp_str> XmlData;
//地图的声明
地图数据;
im使用RapidXML解析器进行XML解析

file<> xmlFile("jobs.xml");
xml_document<> doc;
doc.parse<0>(xmlFile.data());

xml_node<> *node = doc.first_node();
while(node != 0) {
    xml_node<> *child = node->first_node();
    while (child != 0)
    {
       xml_node<> *subchild = child->first_node();
       while (subchild != 0)
       {
           xml_node<> *subsubchild = subchild->first_node();
           while (subsubchild != 0)
           {
               xml_node<> *subsubsubchild = subchild->first_node();
               while (subsubsubchild != 0)
               {
                  // the error appears here
                  XmlData[node->name()][child->name()][subchild->name()][subsubchild->name()][subsubsubchild->name()] = subsubsubchild->value();
                  subsubsubchild = subsubsubchild->next_sibling();
               }
               subsubchild = subsubchild->next_sibling();
           }
           subchild = subchild->next_sibling();
       }
       child = child->next_sibling();
    }
    node = node->next_sibling();
}
文件xmlFile(“jobs.xml”);
xml_文档文档;
parse(xmlFile.data());
xml_node*node=doc.first_node();
while(节点!=0){
xml_node*child=node->first_node();
while(child!=0)
{
xml_node*subchild=child->first_node();
while(子孩子!=0)
{
xml_node*subsubchild=subchild->first_node();
while(subsubchild!=0)
{
xml_node*subsubchild=subchild->first_node();
while(subsubchild!=0)
{
//错误出现在这里
XmlData[node->name()][child->name()][subchild->name()][subsubchild->name()][subsubsubchild->name()]=subsubsubchild->value();
subsubchild=subsubchild->next_sibling();
}
subsubchild=subsubchild->next_sibling();
}
subchild=subchild->next_sibling();
}
child=child->next_sibling();
}
node=node->next_sibling();
}
我必须使用5个while循环来迭代所有节点

XML:


检测\u c_new.dcp
MyWS
管理
0
第一场
0
第一层
CTX_MEM_Detail.jpg
我的状态1
CSV
1.
CTX_MEM_Detail.csv
在CentOS 6下使用带有c++0x的g++进行编译时,我遇到以下错误:

Job.cpp:133: error: no match for âoperator=â in â((std::map<char*, std::map<char*, char*, cmp_str, std::allocator<std::pair<char* const, char*> > >, cmp_str, std::all$
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_map.h:251: note: candidates are: std::map<_Key, _Tp, _Compare, _Alloc>& std::map<_Key, _Tp, _Compa$
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_map.h:266: note:                 std::map<_Key, _Tp, _Compare, _Alloc>& std::map<_Key, _Tp, _Compa$
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_map.h:286: note:                 std::map<_Key, _Tp, _Compare, _Alloc>& std::map<_Key, _Tp, _Compa$

Job.cpp:133:error:no-match-for-operator=in.((std::mapchar*)作为映射键是一件可怕的事情,也可能是值

您可以使用const char*作为密钥,因为它绝对确保您传递指向稳定对象的指针,例如仅传递文本


基线解析将使用字符串作为键和有效负载,我猜您的问题也会消失。最可能的直接原因是您的值拒绝转换为char*

提供完整的错误消息很重要。上面显示的错误会减少,不会显示所有信息。尤其是您希望阅读第一行,检查表达式两边的类型。你可能会意识到你在分配错误的东西。除此之外,我并不特别喜欢你正在做的一个5级地图的想法……考虑在XML图书馆中建立一棵树或者使用现有的树类型。这看起来是个坏主意。一个XML文件WOU最好用树来表示,而不是用地图来表示。@svk:不,他提供了自己的比较Noh,你是对的,这里没有比较问题。删除注释。@svk as David Rodríguez-dribeas我使用自己的比较
Job.cpp:133: error: no match for âoperator=â in â((std::map<char*, std::map<char*, char*, cmp_str, std::allocator<std::pair<char* const, char*> > >, cmp_str, std::all$
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_map.h:251: note: candidates are: std::map<_Key, _Tp, _Compare, _Alloc>& std::map<_Key, _Tp, _Compa$
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_map.h:266: note:                 std::map<_Key, _Tp, _Compare, _Alloc>& std::map<_Key, _Tp, _Compa$
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_map.h:286: note:                 std::map<_Key, _Tp, _Compare, _Alloc>& std::map<_Key, _Tp, _Compa$