C++ 错误:“unordered_map”未命名类型

Posted

技术标签:

【中文标题】C++ 错误:“unordered_map”未命名类型【英文标题】:C++ error: 'unordered_map' does not name a type 【发布时间】: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 【参考方案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/reserve。 reserve 方法是 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 容器,例如地图和矢量。

【讨论】:

以上是关于C++ 错误:“unordered_map”未命名类型的主要内容,如果未能解决你的问题,请参考以下文章

C++ 11 unordered_map 分段错误

C++ unordered_map emplace() 函数抛出段错误,我不知道为啥

在 C++ 中定义未命名结构时出错 [重复]

C ++:访问unordered_map中的数据时出现段错误以设置

错误:未命名类型,将指向类的指针设置为 0

unordered_map 段错误