Использование unordered_map в моем компиляторе g ++ (5.1.0) в командной строке показывает ошибку - PullRequest
0 голосов
/ 06 ноября 2019

Я недавно загрузил MinGW на свой компьютер, но при использовании определенных контейнеров и итераторов, таких как unordered_map и auto, он показывает непредвиденную ошибку.

мой код выглядит следующим образом:

#include <bits/stdc++.h>
#include<unordered_map>
using namespace std;


int main()
{

    unordered_map<string, int> umap; 

    umap["GeeksforGeeks"] = 10; 
    umap["Practice"] = 20; 
    umap["Contribute"] = 30; 

    for (auto x : umap) 
      cout << x.first << " " << x.second << endl; 


    return 0;
}

itвыдает следующую ошибку:


C:\Users\naima\Documents\cpp>g++ -o try2 try2.cpp
In file included from C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++/unordered_map:35:0,
                 from try2.cpp:2:
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
 #error This file requires compiler and library support for the \
  ^
try2.cpp: In function 'int main()':
try2.cpp:9:5: error: 'unordered_map' was not declared in this scope
     unordered_map<string, int> umap;
     ^
try2.cpp:9:25: error: expected primary-expression before ',' token
     unordered_map<string, int> umap;
                         ^
try2.cpp:9:27: error: expected primary-expression before 'int'
     unordered_map<string, int> umap;
                           ^
try2.cpp:11:5: error: 'umap' was not declared in this scope
     umap["GeeksforGeeks"] = 10;
     ^
try2.cpp:15:15: error: 'x' does not name a type
     for (auto x : umap)
               ^
try2.cpp:19:5: error: expected ';' before 'return'
     return 0;
     ^
try2.cpp:19:5: error: expected primary-expression before 'return'
try2.cpp:19:5: error: expected ';' before 'return'
try2.cpp:19:5: error: expected primary-expression before 'return'
try2.cpp:19:5: error: expected ')' before 'return'

1 Ответ

0 голосов
/ 07 ноября 2019

Компилятор сказал вам, что именно не так. Обычно это так.

This file requires compiler and library support for the ISO C++ 2011 standard. This
support is currently experimental, and must be enabled with the -std=c++11 or
-std=gnu++11 compiler options.

Вы просто должны скомпилировать с соответствующим флагом, -std=c++11. Я не знаю, соответствуете ли вы версии по отношению к тому, что используют грейдеры или что, но есть очень мало веских причин для того, чтобы использовать компилятор minGW, где поддержка 8-летнего стандарта все еще считается экспериментальной.

Вы можете видеть, что он работает, как и ожидалось, здесь: https://godbolt.org/z/JQxL00 Если вы удалите флаг -std=c++11, он не будет скомпилирован и выдает то же сообщение об ошибке.

Вы также можете заметить, что яизменил включает только то, что я использую. Это приводит к гораздо более быстрому времени компиляции, меньшему количеству исполняемого файла и более легкой для понимания части кода (поскольку ясно, какие стандартные функции используются). Вы также избегаете загрязнения своего пространства имен.

...