不同的命名空間的我有以下結構的鏈式哈希表:分配不兼容的類型和使用C
typedef struct{
char* phrase;
struct phrase_struct* next;
}phrase_struct;
我對這種結構殺到了指針實際上提到了可能不會有一個typedef定義但..但它編譯,所以我覺得這是有效的語法。我有幾個函數分配內存並操作指向下一個節點的指針next
。
考慮以下類型的指針和自動分配結構:
phrase_struct* ptr1
phrase_struct* ptr2
phrase_struct test_s;
如果我做了如下分配:
ptr1 = &test_s
ptr2 = test_s.next;
< - 該指針將被設置爲在代碼
我會不斷地得到錯誤抱怨型的不相容分配別處NULL:
'=' : incompatible types - from 'phrase_struct *' to 'phrase_struct *'
然後它打我..我回憶起之前讀過關於typedef的命名空間和實際結構名稱是獨立的東西。
typedef struct test{
char* phrase;
struct test* next;
}phrase_struct;
更改結構定義到這個固定所有的警告。
有人可以解釋這一點嗎?
要考慮的另一個選項是:刪除'typedef',並將該類型稱爲'struct phase_struct'。但是如果你決定使用'typedef'(給這個類型一個更短的名字),那麼typedef的名稱可以和標籤相同:'typedef struct phase_struct {/ * ... * /} phase_struct;' –