boost lib, неупорядоченный набор с c ++ доставляет мне головную боль

хорошо, я знаю, что это, вероятно, будет очень просто, но у меня есть этот код, реализующий библиотеки 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: error: ожидаемый неквалифицированный идентификатор перед токеном». » И я повторяю, я знаю, что это, вероятно, довольно просто, я просто не использовал библиотеки повышения раньше. Я посмотрел на множество примеров в интернете, и я не могу просто заставить этот «простой» кусок работать. Спасибо.

0

Решение

Ваш um не переменная-член, это определение типа. Избавиться от typedef ключевое слово.

Теперь по поводу вашего второго номера ……

Избавьтесь от метода члена вычисления хеша & второй аргумент шаблона. Избавьтесь от второго аргумента insert (). 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;
}
0

Другие решения

Вы используете typedef для объявления типа. гм тип, а не переменная. Удалите typedef из вашего кода или объявите переменную типа um.

0

По вопросам рекламы [email protected]