【问题标题】:C++ error: 'unordered_map' does not name a typeC++ 错误:“unordered_map”未命名类型
【发布时间】:2013-03-31 18:50:24
【问题描述】:

据我所知,我所做的一切都是正确的,并且收到了错误消息:

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;

我能够消除第一个错误,但是当我尝试保留时,我仍然收到第二个错误消息。

EDIT2:如下所述,reserve 必须进入 main 并且我需要使用 flag 进行编译

-std=c++0x

不过,还是出现了与unordered_map相关的错误,即:

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

【问题讨论】:

  • 提供一个完整的例子
  • 您使用的是哪个编译器的哪个版本?您正在使用哪些选项来编译代码? 请记住,std::unordered_map 可用于 C++11
  • g++.exe(MinGW 下的 g++)。 gcc 版本是 4.6.2。那么有没有办法让我使用 unordered_map?当我使用命名空间 tr1 时,我可以声明我的 unordered_map,但是当我尝试保留空间时,我仍然收到错误。
  • 您不能在函数或方法定义之外调用函数或方法。对reserve 的调用必须移至main

标签: c++ types unordered-map


【解决方案1】:

g++ -std=c++11编译(我的gcc版本是gcc 4.7.2)和

#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;
}

【讨论】:

  • 对于 GCC 4.6.2 应该是 -std=c++0x
  • @JonathanWakely 谢谢。我忘了提到我的 g++ 版本
  • 啊,是的,愚蠢的错误,reserve 语句必须在 main() 中,我确实需要使用 gcc 4.6.2 的 -std=c++0x 标志进行编译。不幸的是,我在使用 unordered_map 时仍然遇到一些困难,我得到:错误:'class std::tr1::unordered_map<:basic_string>, int>' has no member named 'reserve'
  • @user788171 请参见此处:en.cppreference.com/w/cpp/container/unordered_map/reservereserve 方法是 c++11 中的新方法。所以要么更新你的 gcc 或者尝试其他方式:)
  • 解决方法是使用std=c++0x,去掉include中的tr1/。
【解决方案2】:

如果您想支持 &lt;unordered_map&gt; 用于 c++11 之前的版本,请使用
#include&lt;tr1/unordered_map&gt; 并以以下形式声明您的地图:- std::tr1::unordered_map&lt;type1, type2&gt; mymap
它将使用技术报告 1 扩展来实现向后兼容性。

【讨论】:

  • 这应该是正确的答案...不是选择的。
【解决方案3】:

你不能execute arbitrary expressions at global scope,所以你应该放

mymap.reserve(7000);

在main里面。

这也适用于其他 STL 容器,例如地图和矢量。

【讨论】:

    猜你喜欢
    • 2018-05-01
    • 1970-01-01
    • 2021-12-15
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多