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】:
如果您想支持
<unordered_map>
用于 c++11 之前的版本,请使用#include<tr1/unordered_map>
并以以下形式声明您的地图:-std::tr1::unordered_map<type1, type2> mymap
它将使用技术报告 1 扩展来实现向后兼容性。
【讨论】:
这应该是正确的答案...不是选择的。【参考方案3】:你不能execute arbitrary expressions at global scope
,所以你应该放
mymap.reserve(7000);
在main里面。
这也适用于其他 STL 容器,例如地图和矢量。
【讨论】:
以上是关于C++ 错误:“unordered_map”未命名类型的主要内容,如果未能解决你的问题,请参考以下文章
C++ unordered_map emplace() 函数抛出段错误,我不知道为啥