C++中调用STL库的hash_map为什么有warning
程序如下#include<fstream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath...
程序如下
# include <fstream>
# include <cstdio>
# include <cstdlib>
# include <cstring>
# include <cmath>
# include <iomanip>
# include <algorithm>
# include <vector>
# include <deque>
# include <list>
# include <map>
# include <hash_map>
using namespace std ;
int main ()
{
freopen ( "hash.in" , "r" , stdin ) ;
freopen ( "hash.out" , "w" , stdout ) ;
return 0 ;
}
warning 如下
编译器TDM-GCC 4.6.1-32bit
编辑器DEV-C++ 5.3.0.1 展开
# include <fstream>
# include <cstdio>
# include <cstdlib>
# include <cstring>
# include <cmath>
# include <iomanip>
# include <algorithm>
# include <vector>
# include <deque>
# include <list>
# include <map>
# include <hash_map>
using namespace std ;
int main ()
{
freopen ( "hash.in" , "r" , stdin ) ;
freopen ( "hash.out" , "w" , stdout ) ;
return 0 ;
}
warning 如下
编译器TDM-GCC 4.6.1-32bit
编辑器DEV-C++ 5.3.0.1 展开
3个回答
展开全部
hash_map不属于C++标准容器,只是SGI C++ STL的扩展容器,所以#include <hash_map>会报上述warning。建议在DEV-C++下使用#include <hash_map.h>。
当然,通用的做法如下代码:
#if defined(__GNUC__)
# if __GNUC__ < 3 && __GNUC__ >= 2 && __GNUC_MINOR__ >= 95
# include <hash_map>
# elif __GNUC__ >= 3
# include <ext/hash_map>
# else
# include <hash_map.h>
# endif
#elif defined(__MSVC_VER__)
# if __MSVC_VER__ >= 7
# include <hash_map>
# else
# error "std::hash_map is not available with this compiler"
# endif
#elif defined(__sgi__)
# include <hash_map>
#else
# error "std::hash_map is not available with this compiler"
#endif
在FreeBSD系统,Linux系统下和Windows系统下都能通用。
不过你不需要这么复杂咯,dev-c++使用#include <hash_map.h>就好了。
当然,通用的做法如下代码:
#if defined(__GNUC__)
# if __GNUC__ < 3 && __GNUC__ >= 2 && __GNUC_MINOR__ >= 95
# include <hash_map>
# elif __GNUC__ >= 3
# include <ext/hash_map>
# else
# include <hash_map.h>
# endif
#elif defined(__MSVC_VER__)
# if __MSVC_VER__ >= 7
# include <hash_map>
# else
# error "std::hash_map is not available with this compiler"
# endif
#elif defined(__sgi__)
# include <hash_map>
#else
# error "std::hash_map is not available with this compiler"
#endif
在FreeBSD系统,Linux系统下和Windows系统下都能通用。
不过你不需要这么复杂咯,dev-c++使用#include <hash_map.h>就好了。
追问
尼玛这么复杂,对于我这个NOIPER来说好像实在是。。难以理解。谢谢咯~对于GCC编译器写# include 行吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
提示说的很清楚了,你的用的这个STL头文件里包含了一些已经不在维护的代码,将来会被去掉。也请你不要用这些代码。你用的STL可能版本有点老
追问
= = 好吧,但是DEV-C++已经是最新版本了呀~
追答
楼下说的是对的,hash的确不是标配的STL容器,但仅仅是名义上的,否则也不会一起打包了。我在VC2008试了包含#include ,但VC没有任何警告提示。这个警告是DEVC++的STL头文件里的编译指令打出来的,只能说明它的STL有潜在的不稳定问题。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在你自己生成的.h文件中加入 # progma once
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询