2015-04-17 3 views
2

Я новичок в C++ и немного помог с моей программой сравнить два файла XML. Это код, который у меня есть:Неизвестная строка имени типа C++

#include "pugixml.hpp" 

#include <iostream> 
#include <unordered_map> 

int main() { 
    pugi::xml_document doca, docb; 
    std::map<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:10:14: error: unknown type name 'string'; did you mean 'std::string'? 
    std::map<string, pugi::xml_node> mapa, mapb; 
     ~~~~~^~~ 

Из того, что я понимаю, я указал это правильно. Должен ли я изменить его, как он просит, или что-то еще пропустить?

+1

вы должны включить использовать зЬй :: строку – userbb

+1

Вам нужно указать его в качестве станда :: строку, если вы хотите использовать строку C++ станда имен. – KostasT

+0

или un-recommanded 'using namesapce std;'. – Jarod42

ответ

6

Вам необходимо включить библиотеку строки, чтобы использовать std::string.

Поскольку вы упомянули много ошибок, я подозреваю, что вы забыли включить <cstring>, чтобы использовать strlen().

#include <string> 
#include <cstring> 
2

Вы должны включить библиотеку строки:

#include <string>