【发布时间】:2014-01-22 23:00:46
【问题描述】:
我有一个具有以下结构的链式哈希表:
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;
我会不断收到错误,抱怨类型分配不兼容:
'=' : 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;