2009-10-20 14 views
0

다음네임 스페이스 문제 사용

를 사용할 때
#include <map> 

using namespace LCDControl; 

std 네임 스페이스에 대한 참조는 결국 LCDControl 이름 공간과 연결됩니다.

예를 들면 다음과 같습니다.

Generic.h:249: error: 'map' is not a member of 'LCDControl::std' 

어떻게 해결할 수 있습니까? 내가 보았던 문서에서이 것에 대해 특별한 것을 보지 못했습니다. 그들 중 대부분은 사용하지 말라고 : using namespace std ;.

다음은 249 행입니다.

for(std::map<std::string,Widget *>::iterator w = widgets_.begin(); 
+0

어떤 컴파일러 : 내가 VS2008에서이 시도 할 때

는, 오류가 발생했습니다? 또한 LCDControl 네임 스페이스에'map'이라는 이름의 것이 있습니까? 어쨌든'네임 스페이스 사용하기 '를 사용하는 이유는 무엇입니까? :) – GManNickG

+0

GMan, 'LCDControl 네임 스페이스에지도가 없습니다. 외부 헤더 파일과 관련된 이름을 계속 실행했기 때문에 네임 스페이스를 사용했습니다. 예를 들어,이 경우 나는 CHAR이라는 이름을 가지고 있으며, 그것은 어딘가에있는 어떤 것과 충돌합니다. 이름을 바꾸는 대신 네임 스페이스 안에 모든 것을 래핑하여 처리했습니다. 물론 전에 C++ 네임 스페이스를 사용한 적이 없으므로 여기에 있습니다. :) – Scott

+0

어디서나 클래스 또는 네임 스페이스 식별자로'std'를 사용합니까? –

답변

4

std 네임 스페이스가 std 네임 스페이스가 숨겨져있는 LCDControl 내에 네임 스페이스가있는 것으로 보입니다. std::map 대신 ::std::map을 사용해보세요.

나는 어느 LCDControl 네임 스페이스 내에서 어딘가 using namespace std를가 있다는 말, 또는 아마도 LCDControl 네임 스페이스 내에서 std을 정의하는 STL 헤더의 #include있을 것입니다.

예 :

namespace LCDControl 
{ 
    #include <map> 
} 

차례로 글로벌 std을 숨기거나 내부 네임 스페이스에 정의 적어도 어느 기호, 아니에요 것 LCDControl::std의 일부로 <map>에 모든 기호를 정의 할 확실한.

namespace testns 
{ 
    int x = 1; 
} 

namespace hider 
{ 
    namespace testns 
    { 
     int x = 2; 
    } 
} 

int y = testns::x; 
using namespace hider; 
int z = testns::x; // <= error C2872: 'testns' : ambiguous symbol 
+1

그래, 그렇게 된 것 같아. 여기 나는 '탐색. – Scott

+0

그래, 그게 그랬어. 이것이 초기 문제를 해결하지 못했다는 점이 궁금합니다. LOL ... CHAR은 링커에 따라 여러 번 정의됩니다. 오, 적어도 이제는 모든 것이 네임 스페이스 안에 있습니다. – Scott

+0

다행입니다. –

1

다음은 그 곳을 한정해야 할 것, 그래서 std 네임 스페이스에있는 클래스 삶을 '지도'. 지도 객체를 어떻게 자격을 얻고 있습니까? 당신은 아무 문제도이 일이 없어야합니다 : 당신이 명시 적마다 자격을하지 않으려면

std::map<foo> myMap; 

또한 같은 것을 할 수 있습니다뿐만 아니라 글로벌 네임 스페이스를 오염하고 싶지 않은 :

using std::map; 
+0

std :: map으로 예선을 진행 중입니다. – Scott

+0

그래, 이제 알 겠어. LCDControl 네임 스페이스가 * 글로벌 네임 스페이스를 오염시키고있는 것 같습니다. –