0

わかりました。これはおそらく非常に簡単なことですが、このコードにBoostライブラリを実装していて(これは初めて使用します)、正しく機能しないようです。これがコードです。hash.h

#include .....
#include "boost/unordered_set.hpp"
#ifndef HASH_H
#define HASH_H

class hash{
public:
    int toHash(string);
    void insertKey(string);
    bool lookupKey(string);
private:
    string hashTable[];
    vector<string> vfile;
    typedef boost::unordered_set<std::string, int> um;
struct hashkey{
    string state;
    int stateno;
};

};

#endif  /* HASH_H */

また、hash.cpp

#include <boost/unordered/unordered_set.hpp>
#include "hash.h"

int hash::toHash(string key){
    unsigned int x;
    std::stringstream ss;
    ss << std::hex << key;
    ss >> x;
    return x;
}

void hash::insertKey(string key){
    um.insert(key,toHash(key));
}

bool hash::lookupKey(string key){
    return um.find(key)==um.end();
}

「hash.cpp:18:7:エラー:予期されたunqualified-idbefore'。'」が表示されます。トークン"。繰り返しになりますが、これはおそらく非常に簡単なことです。Boostライブラリを使用したことはありません。私はインターネットで多くの例を見ましたが、この「単純な」部分をうまく機能させることができないようです。ありがとう。

4

2 に答える 2

0

あなたumはメンバー変数ではなく、typedefです。typedefキーワードを削除します。

さて、あなたの2番目の問題に関して......

ハッシュ計算メンバーメソッドとテンプレートの2番目の引数を削除します。insert()の2番目の引数を削除します。boost unordered_setは、std::stringを含む多くの標準タイプのハッシュ関数をすでに提供しています。ただし、ユーザー定義型をハッシュする場合は、ハッシュ関数を提供する必要がありますが、ここで行う方法ではありません。hash_value()次のような名前の関数のオーバーロードを作成します。

std::size_t hash_value(yourUserDefinedType_probablyAClassName const &t) 
{
    std::size_t retValue;
    //...compute your hash however you want & store in retValue....
    return retValue;
} 
于 2012-12-08T07:35:20.323 に答える
0

typedefを使用して型を宣言します。umは型であり、変数ではありません。コードからtypedefを削除するか、um型の変数を宣言します。

于 2012-12-08T07:35:39.137 に答える