2013-03-22 1 views
-1

에 대한 포인터를 역 참조 또한의 우리가 소스 파일에 두 개의 구조체가 있다고 가정 해 봅시다 불완전 형

typedef B* beta; 
typedef A* alpha; 

을,이 함수 프로토 타입이 정의되어 헤더 파일에서 :

printAplha(alpha); 
compare(const beta, const beta); 

주 파일에는 특정 헤더 파일과 코드가 포함되어 있습니다. 이케이 : 코드의 마지막 줄에서

alpha one, two; 
printAlpha(one); 
printAlpha(two); 
//everything works fine up to here 
compare(one->y, two->y); 

내가

main.c:37:20: error: dereferencing pointer to incomplete type
main.c:37:33: error: dereferencing pointer to incomplete type

을 얻고 난으로 (인수가있는 타입 alpha의 것, 내가 compare에 대한 래퍼 기능을 사용할 수 있습니다 알고 compare 함수의 인수는 변경할 수 없습니다 (재귀 함수입니다). 그러나 다른 해결책이 있는지 알고 싶습니다. 왜 이런 일이 발생합니까?

참고 : 내부 구조의 암호화를 위해 구조체 정의가 소스 파일에 기록되었습니다.

+0

왜 내 질문에 답이 나옵니까? 누군가 내가 뭘 잘못했는지 알 수있는 이유를 제공 할 수 있었습니까? – Chris

답변

1

typedef를 사용하여 struct Astruct B의 은폐 데이터 형식을 선언하려고하지만 동시에 이와 같은 은폐 데이터 형식을 사용하는 필드에 액세스하려고합니다.

위 중 하나만 수행 할 수 있으며 둘 다를 동시에 수행 할 수는 없습니다.

해결 방법은 전체 구조체 정의를 노출하거나 특정 필드에 액세스하는 데 도움이되는 도우미 메서드를 제공하는 것입니다. 도우미 메서드의 구현은 전체 구조 정의에 다시 액세스해야합니다.

+0

감사합니다 Tuxdude, 당신은 내가 정확하게하려고 노력하고있어! 나는 도우미 메서드를 만들 것이다. – Chris

1

분명히하고있는 일은 "암호화"가 아니지만, 예제 코드가 이러한 구조의 구현을 볼 수 없게 만들고 있습니다. 구조체의 필드에 액세스하려면 전체 구조체 정의를 해당 변환 단위에 표시 할 수 있어야합니다. 그렇지 않으면 오류 메시지와 마찬가지로 불완전한 유형입니다.

관련 문제