2017-03-02 74 views
0

分配我得到以下警告(鏈表)警告:從兼容的指針類型

警告消息:

警告:任務從兼容的指針類型

在下面的行警告:

for(ptr = & hashTable [hashFunction(s)]; ptr!= NULL; ptr = ptr-> next)

我的問題:

我只是不知道要糾正這一問題。有什麼問題以及如何解決這個問題? 非常感謝。

下面是源代碼:

typedef struct { 
struct SinglyLinkedList *next; 
char name[50];      // key 
int mid;       // mark 
int final; 
} SinglyLinkedList; 

// Global Variables 
int tableSize; 
SinglyLinkedList *hashTable; 

... 

SinglyLinkedList* find (char *s) 
{ 
    SinglyLinkedList *ptr; 

    for (ptr = &hashTable[hashFunction(s)]; ptr != NULL; ptr = ptr->next) { 
     if (strcmp(s, ptr->name) == 0) { 
      return ptr; //found 
     } 
    } 
return NULL; //not found 
} 

... 

int main(void) { 
... 

hashTable = (SinglyLinkedList*) malloc (sizeof(SinglyLinkedList) * tableSize); 

... 
} 

添加的代碼:

int hashFunction(char *s) { 
    int hashValue; 

    for(hashValue = 0; *s != '\0'; s++) { 
     hashValue += *s; 
    } 

    return hashValue % tableSize; 
} 
+2

是否可以在'typedef struct {[...]}中的struct SinglyLinkedList' SinglyLinkedList'實際上是一個不同的/ new/local類型?由於'SinglyLinkedList'尚未定義,所以您可能會生成一個指針對象,這似乎很奇怪。 – JHBonarius

+0

@wildplasser對不起,剛添加了hashTable的代碼 –

+0

添加了一個額外的層次。並且讓'hashTable'指向一個指針數組(或指向指針的指針,而malloc()則是你想要的大小)。順便說一下:tableSize是未初始化的。 – wildplasser

回答

1

我平時的typedef節點的這個樣子。它擺脫了我的警告。

typedef struct SinglyLinkedList_TAG { 
    struct SinglyLinkedList_TAG *next; 
    char name[50];      // key 
    int mid;       // mark 
    int final; 
} SinglyLinkedList; 
+0

非常感謝您! –

相關問題