2011-12-21 64 views
0

當我試圖使用和訪問指向我的結構我不斷收到的"dereferencing pointer to incomplete type" ....訪問結構:derefrencing指向不完全類型

例如煩人的消息在我user.h文件我有這個typedef

typedef struct FacebookUser_t* User; 

,在我user.c文件,其中包括user.h我有這樣的結構:

struct FacebookUser_t {...}; 


所以,當我需要一個指向結構我只用User blabla; 它似乎工作,我把它添加到泛型列表作爲Element這是void*,這就是在list.h爲它的類型定義:

typedef void* Element; 

,當我回來從包含列表中的一個節點ElementUser)我不能訪問它的成員,我在做什麼錯?謝謝!

回答

1

的問題是,C文件沒有訪問該strucure的實施。

嘗試移動結構的定義在頭文件。

+0

好吧,我已經嘗試過了,我把結構定義在user.h也是它的類型定義,而是從其他.c文件仍然不能訪問它,即使它們包括user.h – 2011-12-21 11:19:18

1

如果要隱藏結構的定義(通過在一個單一的C文件粘貼實際struct {塊,僅在頭露出typedef版的名字,你不能指望直接訪問的字段。

解決此問題的辦法是繼續進行封裝,並定義了訪問功能,即你必須(在user.h):

const char * user_get_name(const User user); 
void   user_set_name(User user, const char *new_name); 
... 

請注意,包括在typedef*往往是混亂的,在我看來。

相關問題