2013-11-28 2 views
0

나는이 headerfile 및 C-파일이 :구조체가 포함 된 공용체는 어떻게 사용합니까?

code.h :

typedef struct types *someType; 

typedef struct { 
    int  thirdint; 
    int  otherint; 
    int  someint; 
} thing, *Thing; 

typedef union { 
    otherthing otherthing; 
    thing thing; 
} types; 

code.c :

someType thestruct; 

(thing)thestruct->someint = 1; 

나는이 작동 할 것이라고 생각하지 않는다, 그것은 무엇입니까? 나는이 코드를 과제의 일부로 받았고, 이것이 나를 오류가되게하는지 모른다.

+0

'SomeType'과'someType'은 같은 의미입니까? – chux

+0

예, 오타를해서 유감입니다! – theva

답변

2

코드가 이해가되지 않습니다. 유효하지 않으며 컴파일되지 않을 것입니다.

당신이 원하는 멤버에 액세스 캐스팅해야 할 필요가 없습니다 :이처럼해야, 즉

thestruct->thing.someint = 1; 

, 당신 같은 캐스트로이 작업을 수행 할 수있는 방법이 없습니다 시도했다.

당신은 물론 적절한 멤버에 대한 포인터를 계산하고 당신이 원하는 경우에, 그와 함께 작업 할 수 있습니다

노동 조합은 기본적으로 모든 구성원이 같은 장소에있는 구조체처럼 행동

thing *thething = &thestruct->thing; 
thething->someint = 1; 
의 인 공용체 자체와 동일한 위치에 있습니다 (즉, 공용체의 시작에서 각 멤버의 시작 부분까지의 오프셋은 모든 멤버에 대해 0입니다).

+0

첫 번째 예제가 마음에 들면 "불완전한 유형으로 포인터를 derefer"하는 오류가 발생합니다. 왜 정의에 도달 할 수 없습니까? 그것은 내 헤더 파일에 있습니다. 이클립스는 'thing'과 'someint'를 적색으로 표시하는데 이는 같은 오류를 가리킬 수있다. – theva

관련 문제