我真的不知道该怎么做。我查找的每个答案都有我不理解的语法。
错误:
Error 1 error C2064: term does not evaluate to a function taking 1 arguments
我在哈希表构造函数中使用了一个函数指针。有人建议我使用和标题来解决我遇到的问题。它解决了错误,但我遇到了上述错误。
我的哈希表声明和ctor如下:
#pragma once
#include "SLList.h"
template<typename Type> class HTable
{
public:
HTable(unsigned int numOfBuckets, std::function<unsigned int(const Type&)> hFunction);
~HTable();
HTable<Type>& operator=(const HTable<Type>& that);
HTable(const HTable<Type>& that);
void insert(const Type& v);
bool findAndRemove(const Type& v);
void clear();
int find(const Type& v) const;
private:
SLList<Type>* ht;
std::function<unsigned int(const Type&)> hFunct;
unsigned int numOfBuck;
};
template<typename Type>
HTable<Type>:: HTable(unsigned int numOfBuckets, std::function<unsigned int(const Type&)> hFunction)
{
ht = new SLList<Type>[numOfBuckets];
this->numOfBuck = numOfBuckets;
this->hFunct = hFunction;
}
Game.h(包含表格):
#pragma once
#include "stdafx.h"
#include "HTable.h"
#include "BST.h"
#include "DTSTimer.h"
using namespace std;
class Game
{
public:
Game(void);
virtual ~Game(void);
void refresh();
void input();
unsigned int xorHash(const string &s);
private:
string userInput;
DTSTimer timer;
BST<string> answers;
HTable<string> dictionary;
};
Game.cpp(我试图传递xorHash函数)
#include "Game.h"
Game::Game(void) : dictionary(2048, std::bind(&Game::xorHash, this))
{
}
Game::~Game(void)
{
}
void Game::refresh()
{
}
void Game::input()
{
}
unsigned int Game::xorHash(const string &s)
{
return 0;
}
提前致谢。
答案 0 :(得分:0)
xorHash
是一个接受1个参数的方法。这意味着它也隐含地使用this
指针。
将其设为static
方法或class
以外的免费功能。
答案 1 :(得分:0)
要传递的哈希函数对象仍需要将值作为参数哈希。那就是你要绑定像
这样的东西std::bind(&Game::xorHash, this, std::placeholders::_1)
_1
- 位需要告诉std::bind()
参数必须去哪里以及哪一个要发送到哪一个(在这种情况下哪一个不是那么有趣,因为只有一个;如果你绑定要接收多个参数的函数,那就更有趣了。)
请注意,您实际上不太可能想要传递真实的成员函数:通常,计算的哈希值不依赖于对象状态,即,您可能最好使xorHash()
成为{{{ 1}}你的类的成员函数并将其传递给:这样你甚至不需要static
任何参数。
答案 2 :(得分:0)
您需要一个占位符来表示未绑定的函数参数:
std::bind(&Game::xorHash, this, std::placeholders::_1)
根据品味,lambda可能更具可读性:
[this](const std::string & s){return xorHash(s);}
虽然我不清楚为什么xorHash
需要成为非静态成员;当然,哈希应仅依赖于它的输入?