2014-03-30 2 views
0

I 다음 샘플 코드가 있습니다역 참조 포인터 때 구조체 포인터의 접근 회원

main.c를

#include "person.h" 
struct person { 
    char* name; 
    int age; 
}; 

Person* makePerson(char* n, int i) { 
    Person person; 
    person.name = n; 
    person.age = i; 
    return &person; 
} 

person.c

typedef struct person Person; 
Person* makePerson(char* n, int i); 

person.h을

나는 오전 Person 포인터에 해당하는 이름과 나이 멤버를 인쇄하려고 할 때 "불완전 유형에 대한 포인터 역 참조"오류가 발생했습니다.

gcc-std = c99 -o main main.c person 컴파일하는 .c

누구든지 나에게 약간의 지침을 줄 수 있습니까? 감사합니다

+4

네,'main.c'에서'name'과'age'에 접근하려고 합니다만, 정의가'person.c'에 있기 때문에 아무것도 모릅니다. 구조체 정의를 헤더 파일로 옮겨야합니다. –

+2

로컬 변수 포인터를 호출자에게 반환하지 않습니다. return & person; –

+1

참고 makePerson에서 malloc을 사용하고 포인터를 반환해야합니다. 이와 같은 지역 변수를 선언 한 경우 makePerson 함수 호출이 끝날 때 포인터가 메모리를 가리키게됩니다. 구조 태그 및 유형 이름을 정의한 경우 – marcadian

답변

0

이 줄 :

의 printf ("사람의 이름 %의 \ t 사람의 연령 : % d 개 \ 없음", PP-> 이름, PP-> 세);

person 구조체를 참조합니다. 그러나 .h 파일에는 단지 전달 선언 만 포함됩니다.

인쇄 기능을 person.c에 넣거나 전체 struct 정의를 person.h으로 옮깁니다.

+0

감사합니다. 문제는 의견에서 해결되었지만 실제로 답변을 제시하는 사람은 처음입니다. – Rohan