2017-10-10 14 views
4

네임 스페이스를 사용하지 않으면 다음과 같은 문제가 발생할 수 있습니다. 실제로 전화가 모호합니다. 나는 "stD :: swap을 사용했다"고 생각했다. 사용할 메소드를 정의합니다.다른 네임 스페이스가 있지만 오버로드 된 함수 호출이 모호합니다.

"int"이지만 "class"가 아닌 이유는 무엇입니까? 내가 대답을 사전에 대단히 감사합니다

../src/Test.h: In member function ‘void stD::aClass::F()’: 
    ../src/Test.h:26:9: error: call of overloaded ‘swap(TEST::Dummy&)’ is ambiguous 
     swap(x); 
      ^
    ../src/Test.h:26:9: note: candidates are: 
    ../src/Test.h:17:6: note: void stD::swap(TEST::Dummy) 
    void swap(TEST::Dummy a){}; 
     ^
    ../src/Test.h:10:6: note: void TEST::swap(TEST::Dummy) 
    void swap(Dummy a){}; 
     ^

:

#include <memory> 

    namespace TEST { 

    class Dummy{}; 

    void swap(Dummy a){}; 
    void sw(int x){}; 

    } 

    namespace stD { 

    void swap(TEST::Dummy a){}; 
    void sw(int x){}; 

    class aClass{ 
    public: 
     void F() 
     { 
      using stD::swap; 
      TEST::Dummy x; 
      swap(x); 
     } 

     void I() 
     { 
      using stD::sw; 
      int b = 0; 
      sw(b); 
     } 
    }; 

    } 

는 오류 메시지입니다.

답변

7

이 줄은 xTEST:: 네임 스페이스를 수행하기 때문에 그래서 모두 void stD::swap(TEST::Dummy)뿐만 아니라 void TEST::swap(TEST::Dummy)를 찾을 수 argument dependent lookup

TEST::Dummy x; 
swap(x); 

을 사용하고 있습니다.

int b = 0; 변수 b이 네임 스페이스에 없으므로 using 문으로 인해 호출 할 수있는 유효한 함수는 stD::sw입니다.

+0

'F '가'stD'에 없으면'TEST :: swap'을 호출 할 가치가 있습니다. – Rakete1111

+0

감사! 이것은 내 질문에 완전히 대답한다. 이제는 나에게 분명하다. – Lycosa