2017-04-10 97 views
1

問:轉換無效的錯誤和無效的類型

寫,沒有實現對學生的滾動哈希函數的程序,並在他們的家庭進行分類。就像5000423,最後2位數字23,2 + 3 = 5,所以屬於家族5

我嘗試:捕獲

#include<iostream> 
#include<cstdlib> 
#include<string> 
using namespace std; 

const int tablesize= 20; 

class hashentry 
{ 
public: 
    int key; 
    int value; 

    hashentry(int key,int value) 
    { 
     this->key=key; 
     this->value=value; 
    } 
}; 

class hashmap 
{ 
public: 
    hashentry **table; 
public: 
    hashmap() 
    { 
     int table=new hashentry *[tablesize]; 
     for(int i=0;i<tablesize;i++) 
     { 
      table[i]=NULL; 
     } 
    } 

    int hashfunc(int key) 
    { 
     return key%tablesize; 
    } 

    void insert(int key, int value) 
    { 
     int hash=hashfunc(key); 
     while(table[hash]!=NULL && table[hash]->key!=key) 
     { 
      hash=hashfunc(hash+1); 
     } 
     table[hash]=new hashentry(key,value); 
    } 
}; 

int main() 
{ 
    int key; 
    int value; 
    hashmap hash; 
    cout<<"enter value"; 
    cin>>value; 
    cout<<"enter key at which element is to be inserted"; 
    cin>>key; 
    hash.insert(key,value); 
    return 0; 
} 

錯誤:

In constructor 'hashmap::hashmap()': 
invalid conversion from 'hashentry**' to 'int' 
invalid types 'int[int]' for array subscript 
+0

猜測指針可能是你的程序中的一個'long' – Jay

+0

'table'應該是構造函數中的'this.table' –

+0

投票以打字方式結束。從構造函數中的int table = new hashentry * [tablesize];中移除int。 – NathanOliver

回答

1
int table=new hashentry *[tablesize]; 

的返回類型new hashentry *[tablesize]hashentry**。由於您試圖將它分配給一個int變量,編譯器會抱怨。很可能,因爲您已經使用正確的類型定義了一個具有相同名稱的成員變量,所以您打算省略int。寫作

table = new hashentry *[tablesize]; 

應該這樣做。

相關問題