【发布时间】:2014-03-18 21:37:05
【问题描述】:
我很困惑为什么终端在我尝试编译时告诉我 hash2 不是模板。
我疯了吗?
template<typename Symbol>
class thehash
{
public:
size_t operator()(const Symbol & item)
{
static thehash2<string> hf;
return hf(item.getData());
}
};
template<typename string>
class thehash2<string>
{
public:
size_t operator()(const string & key)
{
size_t hashVal = 0;
for(char ch : key)
hashVal = 37 * hashVal + ch;
return hashVal;
}
};
【问题讨论】:
-
简单语法错误;不要将
<string>放在class thehash2之后。此外,我建议使用string以外的其他名称作为模板参数名称,因为它非常令人困惑;读者最初可能会认为您指的是std::string。 -
你需要定义或至少声明
hash2before使用它。 -
template<typename string> class thehash2<string>是完全错误的派生语法!!