2012-06-24 2 views
1

여러 파일에 네임 스페이스를 정의하고 있습니다. 한 파일에서 네임 스페이스 내에서 MyType이라는 형식을 선언했습니다. 네임 스페이스 내에있는 다른 파일에서도 헤더 파일을 포함하지 않고도 해당 형식을 볼 수 없습니까?C++ : 네임 스페이스의 여러 파일에서 typedef를 사용합니다.

FILE A 
namespace EE 
{ 
    typedef int MyType; 
} 


FILE B 
namespace EE 
{ 
    MyType a = 10; 
} 

다시 말하지만, 내 이해에 네임 스페이스가 포함을 정리하는 데 도움이 : 다음은 예입니다. 30 파일이 사용할 형식을 정의하면 네임 스페이스를 사용하는 경우 머리글을 모두 포함하지 않아도됩니다.

+7

아니요, 네임 스페이스가 잘못 이해되었습니다. 당신은 아직도 헤더 –

답변

6

이름 충돌 문제를 해결하기 위해 이름 공간이 도입되었습니다. 꽤 많이 있습니다. 하나의 파일을 컴파일하면 오브젝트 파일이 생성됩니다. 이 오브젝트 파일의 정보는 다음 파일을 컴파일 할 때 컴파일러에 대한 지식을 풍부하게합니다. 즉, 각 C/C++ 파일에 헤더 정의의 일부로 정의를 포함해야합니다. 그리고 typedef가 네임 스페이스의 일부인지 여부는 중요하지 않습니다.

typedef는 "하나의 정의 규칙"에 대한 예외입니다. 당신은 다음과 같이 하나 개의 번역 단위에서 여러 동일한 형식 정의를 가질 수 있습니다

typedef int MyInt; 
.... 
typedef int MyInt; 

이 구문 오류가 발생하지 않습니다.

내 보낸 템플릿에 대해 "지식을 풍부하게하지 않음"규칙에 한 가지 예외가 있습니다. 그러나 이것은 템플릿에만 적용되며이 기능은 컴파일러에서 지원되지 않습니다. 심의 후에 표준에서 제거되었습니다.

+0

OK를 포함 할 필요가있다. 그래서 나는 여전히이 경우 include를 사용할 필요가있다. 좋아, 그럼. – user947871

관련 문제