调用哈希类函数

时间:2014-11-27 21:28:46

标签: c++ hash

我正在尝试创建自己的哈希类。然而,经过无数次尝试,我无法使我的程序正常工作。我相信我在调用函数时出错,但我不太确定。任何人都可以帮我弄清楚我做错了什么,并可能告诉我如何解决它?

hash.h

#include <iostream>

class MyHash {
public:
    MyHash();
    int hashCode(char, char);
};

hash.cpp

#include <iostream>
#include "Hash.h"

MyHash::MyHash() {}

int MyHash::hashCode(char first_letter, char last_letter) {
    int hash = 0;
    int ascii = 1;

    hash = ((ascii * first_letter) + (ascii * last_letter)) % 23;

    return (hash);
}

driver.cpp

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include "Hash.h"

using namespace std;

int main() {
    vector<string> words;
    int first_letter;
    int last_letter;
    string word;
    int n = 0;
    int hash = 0;

    for (int i = 0; i < 5; i++) {
        cout << " Please enter a word: ";
        cin >> word;
        words.push_back(word);
    }

    vector<string>::iterator itr = words.begin();
    for (; itr != words.end(); itr++) {
        first_letter = *itr[n].begin();
        last_letter = *itr[n].rbegin();
        cout << endl << " " << first_letter << " " << last_letter << endl;
        hash = hashCode(first_letter, last_letter) cout << hash << endl;
    }
    return 0;
}

2 个答案:

答案 0 :(得分:1)

为什么要将一个函数包装在一个类中?定义一个类是完全随意的,不在其中放置任何数据然后尝试从中调用该函数而不声明任何对象。

int hashCode(char first_letter, char last_letter) {
    int hash = 0;
    int ascii = 1;

    hash = ((ascii * first_letter) + (ascii * last_letter)) % 23;

    return (hash);
}

如果你想使用一个类,你需要有一个结构:

class myHash{
  public:
    myHash();
    insert();
    remove();
  private:
    std::vector<std::string> words;
    hash();
    rehash();
};

答案 1 :(得分:1)

因此,为了克服编译问题并且不改变程序的整体结构,您需要将对hashDode(...)的调用更改为MyHash::hashCode(...),并更改int hashCode(char, char);的声明成为static int hashCode(char, char);

你不能只调用在某个范围内定义的函数并期望编译器弄清楚它,你需要给出一些关于函数所在位置的指示。由于它是一个类方法,您需要指定一个类对象或类本身。

static关键字允许您在没有对象的情况下调用该函数,在这种情况下可以正常,因为您的对象中没有任何数据。