Мой код выглядит следующим образом:Возможно ли иметь указатель на unordered_set <MyClass> в составе myClass?
class Node : public bitset<BITS_COUNT> {
public:
Node(string s) : bitset<BITS_COUNT>(s) {}
void setGroup(unordered_set<Node>* newSet) { currentGroup = newSet; }
unordered_set<Node>* getCurrentSet() { return currentGroup; }
private:
unordered_set<Node>* currentGroup = nullptr;
};
Но компилятор не позволяет мне сделать это, так как не существует хэш-функция определена для класса Node. Я хотел бы, чтобы использовать хэш-функции из базового класса, так что я сделал это:
namespace std
{
template<>
struct hash<Node>
{
size_t operator()(const Node& k) const
{
return k.hash();
}
};
}
Но она по-прежнему не работает. Если я поместил это перед делением раздела Node, k.hash() не определено (и я не могу переслать declare Node: public bitset <>, так как это невозможно). Если я помещаю это после объявления класса, я получаю ошибку, что для класса Node не существует хеш-функции.
Как я могу решить эту проблему?
Что мешает вам объявить 'хэш {}' 'до того класса Node {}' и 'определяющий size_t хэш :: оператор()' после этого? –
Frank
Ни 'Node', ни его базовый класс' std :: bitset', не имеют метода с именем 'hash'. Вы, вероятно, имеете в виду 'return std :: hash>() (k);' –
@IgorTandetnik Я использую визуальную студию 2015, а битсет имеет функцию hash() –