g++编译报错:specialization of template.... in different namespace解决方案

specialization of template… in different namespace解决方案

同样的代码,使用clang++编译通过,可是使用g++报错如下:
error: specialization of 'template<class _Tp> struct std::hash' in different namespace [-fpermissive] class std::hash<MyClassType>

源代码为:

template<>
class std::hash<MyClassType>
{	// hash functor
public:
	//...Codes...
};

修改为:

namespace std{
template<>
class hash<MyClassType>
{	// hash functor
public:
	//...Codes...
};
}

按照上面的改动就可以解决这个错误。看报错的原因,是说我声明的hash和系统预定义的hash不在同一个命名空间内。
在一些旧版的gcc中是可以接受这样的写法,但是这样是并不合法的。

这里的代码中的hash明明就是在std的命名空间。这个出错很奇怪,考虑可能是编译器的BUG。这个解决方案,也只是相同的代码逻辑换了一种写法而已。

参考链接:

  • https://blog.csdn.net/coder_xia/article/details/6764777
  • http://gcc.gnu.org/ml/gcc/2005-04/msg00134.html
  • https://womble.decadent.org.uk/c++/template-faq.html#specialise-ns
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值