2010-02-01 4 views
2

여기에 모호성을 피하는 것이 가장 좋습니다. 그것은 "무효 스왑 (T &, T &)", "무효 표준 : 스왑 (_Ty &, & _Ty) 여부를 확인할 수 없다고으로 스왑과 통화C++ 내 첫 번째 템플릿

template <class T> 
inline void swap(T &a, T &b) 
{ 
    T c; c = a; a = b; b = c; 
} 
/* blah blah blah (inside of a function:) */ 
for (itv = vals.begin(); itv != vals.end(); ++itv) 
{ 
    if (at < (*itv)) { swap(at, (*itv)); } 
    if (at % (*itv) == 0) atadd = false; 
} 
/* blah blah blah */ 

, 중 하나가 작동하지 않습니다 "또는 ...

Btw, itv는 <int> :: iterator입니다.

Thx.

답변

9

문제는 swap() 기능을 포함 네임 스페이스 std이고 당신이 어딘가에 이전 using namespace std;을 가지고있는 것처럼 보이는, 그래서 컴파일러는 사용할 swap() 결정할 수 없습니다 - 당신을 글로벌 네임 스페이스 또는 네임 스페이스 std의 하나.

컴파일러에서 을 네임 스페이스 std 대신 글로벌 네임 스페이스에서 사용하도록 명시 적으로 호출하려면 "::"을 앞에 추가해야합니다. 또는 swap() 함수의 이름을 바꿀 수도 있고 using namespace std;을 사용할 수도 있습니다.

+1

이렇게하면 표준에서 이미 사용할 수있는 경우 '스왑'을 다시 정의하는 이유가됩니다. –