2011-12-02 1 views
2

방금 ​​WinXP에서 Seven으로 업그레이드했고 프로젝트를 컴파일하기 위해 Windows SDK를 추가해야했습니다.C++에서 이름 충돌을 제거하는 가장 좋은 방법

지금까지는 두 번째 프로젝트가 걸린 상태 였지만 'PlayerState'는 내 프로젝트에서 클래스로, Windows SDK (effects.h)는 열거 형으로 사용되며 분명히 오류가 발생합니다 (오류 C2011 : 'PlayerState': '구조체'형식 재정의).

이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

는 나는 생각했다 :

  • 이름 변경,하지만 난 명명 규칙을 깰 것이다 (그리고 정말 선수 '상태'는) 모든 네임 스페이스에 넣기
  • ,하지만 내가 놓아야합니다 다른 방법으로 (아마도 특별한 MSVC 2010의 vay)이 있는가 작업

의 부지를 의미 네임 스페이스에있는 클래스의 해당 파일 또는 'UNDEFINE'이 열거 또는 뭔가 다른 어떤 종류를 제외라고?

[편집] 대답은 크고 분명합니다. NAMESPACES! +1하고 모두 감사합니다!

+2

이러한 문제를 방지하기 위해 생성 된 네임 스페이스가 아니 었습니까? 더 많은 작업이 필요할지라도 올바른 방법으로 보이기 때문에 그렇게하는 것이 좋습니다. – slayton

답변

7

네임 스페이스, 그것이 바로 그 것이다. 이름 충돌을 그룹화하고 피합니다. 코드 기반을 살펴보고 모든 것을 네임 스페이스에 넣으면 해가되지 않습니다. 그것은 이미 당신이해야 할 일입니다.

2

확실한 대답은 모든 프로젝트에 맞춤 네임 스페이스를 사용하는 것입니다. 고유 한 이름을 가져야하고 네임 스페이스가 더 깊다면

3

네임 스페이스에서 퍼팅,하지만 나는 기본적으로,

음, 어려운 많은 작업을 의미 네임 스페이스의 모든 클래스를 넣어해야합니다. 클래스는 어쨌든 네임 스페이스 에 있어야합니다. 네임 스페이스에 넣지 않으면 유지할 수 없습니다. 단지 모서리를 자르는 것입니다. 이것이 바로 이유입니다.

2

네임 스페이스에 넣었습니다.

아니요, 그렇다고해서 모든 클래스를 네임 스페이스에 넣어야하는 것은 아닙니다. 갈등이 여전히 그 시간에 발생한다면 정말 빠른 앤 더러운 가고 싶은 경우 그냥

typedef myns::PlayerState myPlayerState; 

을 적절한 시간에

using myns::PlayerState; 

말, 또는,

#define PlayerState MyPlayerState 

<windows.h> 등 후

관련 문제