2015-04-22 144 views
0

我在前一個主題上得到了一些幫助,我不得不改變我的地圖使用int和字符串組合。當我這樣做時,它給了我一個不同的問題。這是問題:缺少地圖初始化的構造函數

src/main.cpp:11:29: error: no matching constructor for initialization of 
     'std::map<int, std::string>' 
    ...tagMap {{"1", "data"}, {"2", "entry"}, {"3", "id"}, {"4", "content"}}; 
    ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

這似乎是問題(我擡頭另一個話題),似乎暗示的事實,問題是讓你的構造做取常量引用?我真的不明白如何實現這一點。

#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; 
    std::map<int, std::string> tagMap {{"1", "data"}, {"2", "entry"}, {"3", "id"}, {"4", "content"}}; 

    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(tagMap[1]).children(tagMap[2])) { 
     const char* id = node.child_value(tagMap[3]); 
     mapa[id] = node; 
    } 

    for (auto& node: docb.child(tagMap[1]).children(tagMap[2])) { 
     const char* idcs = node.child_value(tagMap[3]); 
     if (!mapa.erase(idcs)) { 
      mapb[idcs] = node; 
     } 
    } 
} 

任何幫助,將不勝感激。

+1

爲什麼「1」,「2」等?你的地圖說'int'。 – chris

回答

4

嘗試某事像:

#include <iostream> 
#include <map> 
#include <string> 

using namespace std; 

int main() { 
    std::map<int, std::string> tagMap {make_pair(1, "data"), make_pair(2, "entry")}; 
} 

編輯:沒有make_pair功能的版本也有效:

#include <iostream> 
#include <map> 
#include <string> 

using namespace std; 

int main() { 
    std::map<int, std::string> tagMap {{1, "data"}, {2, "entry"}}; 
} 

,你需要記住的唯一的事情是,你不應該依賴編譯器常量字符串文字到數字轉換...

+0

謝謝你的回覆。雖然這讓我更接近仍然給了我錯誤:'src/main.cpp:20:30:錯誤:沒有可行的從'mapped_type'(又名 'std :: __ 1 :: basic_string ')轉換爲' const char_t *'(aka'const char *') for(auto&node:doca.child(tagMap [1])。children(tagMap [2])){ ^ ~~~~~~~~''' –

+1

第20行嘗試:'auto id'而不是'const char * id',同樣在第25行。 –

+0

這似乎給了我同樣的錯誤src/main.cpp:20:30錯誤:沒有可行的轉換從'mapped_type'(aka'std :: __ 1 :: basic_string ')到 'const char_t *'(aka'const char *') for(auto&node:doca.child(tagMap [1])。children tagMap [2])){'''。這是一個相關的錯誤,或者我應該打開一個新的問題 –