4

我是 C++ 新手。这是我的家庭作业,下面是教授给我们的代码,帮助我们完成这项任务,但它没有编译...我已经标记了生成错误的行,错误消息是“不能在没有模板参数列表的情况下引用模板“哈希””。
我不知道如何解决它。有人可以指出我正确的方向吗?
(我已经删除了我认为与错误消息无关的行。)

该类定义为:

template <typename HashedObj>
class HashTable
{
public:
    //.... 
private:
    struct HashEntry
    {
        HashedObj element;
        EntryType info;
        HashEntry( const HashedObj & e = HashedObj( ), EntryType i = EMPTY )
           : element( e ), info( i ) { }
    };

    vector<HashEntry> array;
    int currentSize;

    //... some private member functions....

    int myhash( const HashedObj & x ) const
    {
        int hashVal = hash( x ); <<--- line with error

        hashVal %= array.size( );
        if( hashVal < 0 )
            hashVal += array.size( );

        return hashVal;
    }
};

int hash( const HashedObj & key );
int hash( int key );

--- 和 cpp 文件中的 int hash() 函数 ----

int hash( const string & key )
{
    int hashVal = 0;
    for( int i = 0; i < key.length( ); i++ )
        hashVal = 37 * hashVal + key[ i ];

    return hashVal;
}

int hash( int key )
{
     return key;
}
4

1 回答 1

4

我怀疑您是using namespace std;(我可以说是因为您使用的是vectorwithout )并且名称空间中std::存在名称,因此名称冲突。hashstd

您应该使用std::而不是引入整个std命名空间,特别是在无辜用户可以使用#include它并污染他们的程序的头文件中std

于 2012-10-21T00:39:58.903 回答