构造函数不会更新类成员变量

时间:2017-11-10 09:29:38

标签: c++ class constructor hashtable

所以我试图实现一个哈希表,我在查看我的类或构造函数中的错误时遇到了问题。总结当我尝试到达哈希表数组的元素时,我可以在构造函数中,但我不能在成员函数中(我得到seg错误),这让我相信我的类/构造函数没有问题&#39工作。

LocalCLuster

这些功能完成他们应该做的事情

但是当我运行这个功能时。我在website::website(int input) //Constructor { SIZE = input; node** hashtable = new node * [SIZE]; for (int i = 0; i<SIZE; i++) { hashtable[i] = NULL; if(!hashtable[i]) { cout<<"It works at "<<i<<"th"<<endl;//This is to check } } } int website::hashfunction(const char array []) //Hash function { int inputsize = strlen(array); int value = 0; for (int i=0; i< inputsize; i++) { value = value + int(array[i]); } value = value % SIZE; return value; } 级别获得了段错误。

hashtable[place]==NULL

这是我的班级:

int website::insert(const mainentry& input)
{
    int place = 0;

    node*temp = new node;
     /* Ignore this part
    temp->data.topic = new char[strlen(input.topic)+1];
    strcpy(temp->data.topic, input.topic);

    temp->data.url = new char[strlen(input.url)+1];
    strcpy(temp->data.url, input.url);

    temp->data.summary = new char[strlen(input.summary)+1];
    strcpy(temp->data.summary, input.summary);

    temp->data.review = new char[strlen(input.review)+1];
    strcpy(temp->data.review, input.review);

    temp->data.rating = input.rating;
    */

     place = hashfunction(temp->data.topic);
    cout<<"Place is: "<<place<<endl; //Hash function works correctly
    if (hashtable[place]== NULL) // THIS IS THE PART I GET SEG FAULT
    {
            hashtable[place] = temp;
            temp->next = NULL;
            return 1;
    }
    else
    {
            temp->next = hashtable[place];
            hashtable[place] = temp;
            return 1;
    }
return 0;
}

我假设我犯了一个初学者的错误,但我无法看到发生了什么,如果有人能指导我,我会很感激。

2 个答案:

答案 0 :(得分:6)

您正在通过编写以下内容来隐藏构造函数中类的hashtable变量:

website::website(int input) //Constructor
{       
    SIZE = input;

    node** hashtable = new node * [SIZE]; //<<-- Shadowing. you are declaring a local scope veriable called hastable, and not using the class's instance.
}

答案 1 :(得分:5)

node** hashtable = new node * [SIZE];

应该是

hashtable = new node * [SIZE];