2014-05-13 3 views
0

나는 전역 범위에서이 구조이 구조체/공용체 선언에 어떤 문제가 있습니까?

struct a{ 
int a; 
int x; 
union b{ 
int a; 
int b; 
int y; 
}; 
}; 

를 선언 그리고 주요 내부에 노동 조합을 선언,

union b a; 

을 그리고이 오류를 제공하지 않습니다. 그러나 선언 조합의 경우 'A'와 같은 구조의 정의에 :

struct a{ 
int a; 
int x; 
union b{ 
int a; 
int b; 
int y; 
}a; 
}; 

이 오류 "중복 회원 A"를 제공합니다. (이전 이름에서 'a'라는 동일한 이름을 사용했습니다.) 왜 다른 하나는 작동하고 다른 하나는 작동하지 않습니까?

두 번째로 struct 내부에서 선언 된 공용체를 어떻게 독립적으로 사용할 수 있습니까? 다른 정수 변수 인 'x'를 사용할 수 없습니까? 같이, 나는 수행 할 수있는 성공적으로 다음

union b z; //works in this case, BUT not if we declare 'z' with the definition. 
z.y=6;  //works 
x=6;  //gives error 

(나는 우리가 주 안에 연합을 선언하는 이해하지만 구조체 내부에서의 정의처럼, struct.union.union_variable 말이 있지만, union.union_variable 필요. 'x'와 같이 대우하면 안됩니다.)

+5

유니온을 'a'로 선언했기 때문에 구조체 a의 다른 멤버가되어 'a'라는 멤버가 이미 있습니까? –

답변

5

"duplicate member a"오류가 발생합니다. (우리는 이전 이름에서 'a'라는 동일한 이름을 사용했습니다) 왜 다른 하나는 작동하고 다른 하나는 작동하지 않습니까?

이제 두 멤버는 a라는 이름의 구조체가 있기 때문에 : 첫 번째는 int이고, 두 번째 유형 b (당신이 union)이다. 당신이 외부 structb을 정의 이미징, 귀하의 경우에는

struct a { 
    int a; 
    float a; 
}; 

정확히 같은 상황이 당신이처럼 사용하려고 : 당신은 컴파일되지 않습니다이를보고 놀라지 않을 것

struct a { 
    int a; 
    union b a; 
}; 

둘째로 struct 내부에서 선언 된 공용체를 어떻게 독립적으로 사용할 수 있습니까?하지만 다른 정수 변수 인 'x'를 사용할 수 없습니까? 마찬가지로 다음을 성공적으로 수행 할 수 있습니다.

x은 (는) 어디에 있습니까? x이라는 로컬 변수가 없습니다 (구조체 멤버는 x이지만 구조체가 필요합니다). 다음 중 하나를 수행하려고합니다 :

int x = 6; 
struct a w; 
a.x = 6; 
+0

하지만, 우리가 노동 조합을 독립적으로 선언하지 않았 냐고 묻고 있습니다. 구조체 안에 'x'가있는 것과 같습니다. union은 왜 그런 식으로 사용할 수 있습니까 (마치 struct 내부에 없지만 독립적으로 선언 된 것처럼)? – nishantbhardwaj2002

+0

@ user3340994 1) 또는 2)에 대해 묻고 있습니까? 1) 그 구문 때문에 당신은 노동 조합뿐만 아니라 그 유형의 변수를 정의하기 때문에. 2) 구조체/공용체 멤버와 같은 이름의 정수형 변수를 사용할 수 있지만 반드시 선언해야합니다. –

+0

나는 (2) – nishantbhardwaj2002

관련 문제