为什么这告诉我thehash2不是模板?

时间:2014-03-18 21:37:05

标签: c++ hashtable

当我尝试编译时,终于告诉我thehash2不是模板,我很困惑。

我疯了吗?

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;
    }
};

1 个答案:

答案 0 :(得分:1)

template<typename string>
class thehash2<string>
{

这是一个错误。你可能想写:

template<typename T>
class thehash2
{

请注意, - 如评论中所述 - 您不应将string用作模板中的类型名称。模板参数的最常见名称通常是单个字母 - TU,......这样它们就不会轻易与实际类型名称混淆。

第二个选项:

class thehash2 : public thehash<std::string>
{

(取决于您的实际需要)