template specifiers not specified in declaration of ‘template class hash’

时间:2021-09-13 17:32:24

尝试写显示特化样例的时候,写了如下代码

#include <iostream>
#include <cstddef> using namespace std; #define __STL_TEMPLATE_NULL template<> template<class Key>
class hash {
public:
void operator()() {
cout << "Hash<T>" << endl;
}
}; //explicit specialization
__STL_TEMPLATE_NULL
class hash<char> {//template specifiers not specified in declaration of ‘template<class Key> class hash’
public:
void operator()() {
cout << "Hash<char" << endl;
}
};

编译时 在红色注释处报错

然后找原因半天找不到

换种写法,出现以下错误

C++::EC - expected initializer before '<' token

根据别人的文章才知道有类名“hash“有混淆。

解决方法:改一下名字,加个命名空间,或者去掉<cstddef>头文件应该就可以了