web-dev-qa-db-ja.com

C ++エラー: 'unordered_map'は型に名前を付けていません

私が知る限りすべてを正しく行っていて、エラーメッセージを受け取りました:

error: 'unordered_map' does not name a type
error: 'mymap' does not name a type

私のコードでは、私は:

#include <unordered_map>

using namespace std;

//global variable
unordered_map<string,int> mymap;
mymap.reserve(7000);

void main {
  return;
}

ここで何が欠けているのかわかりません...

編集:宣言を次のように更新したとき

std::tr1::unordered_map<string,int> mymap;

最初のエラーは解消できましたが、予約しようとすると、2番目のエラーメッセージが表示されます。

EDIT2:以下で指摘するように、予約はメインに移動する必要があり、フラグを付けてコンパイルする必要があります

-std=c++0x

ただし、unordered_mapに関連するエラーは次のように表示されます。

error: 'class std::tr1::unordered_map<std::basic_string<char>, int>' has no member named 'reserve'
13
user788171

g++ -std=c++11でコンパイル(私のgccバージョンはgcc 4.7.2です)AND

#include <unordered_map>
#include <string>

using namespace std;

//global variable
unordered_map<string,int> mymap;

int main() {
  mymap.reserve(7000); // <-- try putting it here
  return 0;
}
17
gongzhitaao

サポートしたい場合は<unordered_map> c ++ 11より古いバージョンの場合
#include<tr1/unordered_map>および次の形式でマップを宣言します:-std::tr1::unordered_map<type1, type2> mymap
これは、下位互換性のためにテクニカルレポート1拡張子を使用します。

4
BarelyEthical

できませんexecute arbitrary expressions at global scopeなので、

mymap.reserve(7000);

メイン内。

これは、マップやベクターなどの他のSTLコンテナーにも当てはまります。

3
taocp