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;私はあなたが(vectorなしで使用しているのでわかります) 、名前空間に名前std::が存在するため、名前が競合していると思われます。hashstd

名前空間std::全体を持ち込む代わりに、特に無実のユーザーがプログラムを汚染する可能性のあるヘッダー ファイルで使用する必要があります。std#includestd

于 2012-10-21T00:39:58.903 に答える