2011-12-21 2 views
0

에 포인터를 derefrencing 나는이를 내 user.h 파일에 "dereferencing pointer to incomplete type" .... 예를 들어액세스하는 구조체 : 내가 사용하는 내 구조체에 대한 포인터를 액세스하기 위해 노력하고있어 때 불완전한 유형

의 성가신 메시지가 계속 typedef는 :

struct FacebookUser_t {...}; 
:
typedef struct FacebookUser_t* User; 

user.h을 포함 내 user.c 파일

나는이 구조체가 내가 그 구조체에 대한 포인터를 필요로 할 때


그래서 나는 단지 User blabla;가 작동하는 것 같다 를 사용하고, 나는 void*입니다 Element로 일반적인 목록에 추가하고 그 list.h에 대한 형식 정의입니다 :

typedef void* Element; 

그리고 내가 Element (User)을 포함하고있는 목록에서 노드를 가져 왔을 때 그 노드의 멤버에 액세스 할 수 없으며 잘못되었습니다. 감사!

답변

1

문제는 C 파일이 해당 구조의 구현에 액세스 할 수 없다는 것입니다.

헤더 파일에서 구조의 정의를 이동하십시오. 당신은 하나의 C 파일의 실제 struct { 블록을 고집 만 헤더에 typedef 에드 이름을 노출하여 (구조의 정의를 숨기려면

+0

ok, 나는 그것을 시도했다. struct.h 정의를 struct.h에 넣었고, typedef도 넣었다. 그러나 그 user.h를 포함하더라도 다른 .c 파일에서 접근 할 수 없다. –

1

, 당신은 직접 필드에 액세스 기대할 수 없습니다.

이 주위에 한 가지 방법은 캡슐화를 계속하고, 접근 자 함수를 정의하는 것입니다, 당신은 (user.h에)있는 것, 즉 :

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

가이 typedef* 내 의견으로는, 종종 혼란을 포함한 유의하시기 바랍니다.