2013-04-22 5 views
0

에서 템플릿을 사용하는 경우.오류 : 모호 과부하 '연산자 <<'운영자에게 I이 모호한 오류가 < <</p> <pre><code>template<typename T> cEnvir& operator<<(const T& t) {out << t; return *this;} </code></pre> <p>과부하 C++에서 템플릿이와 C++

error: ambiguous overload for ‘operator<<’ in ‘((cEnvir*)this)->cEnvir::out << t’ 
/usr/include/c++/4.2.1/ostream:169: note: candidates are: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long int) [with _CharT = char, _Traits = std::char_traits<char>] <near match> 

/usr/include/c++/4.2.1/ostream:173: note:     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long unsigned int) [with _CharT = char, _Traits = std::char_traits<char>] 

... 

typename T의 경우 컴파일러가 일치를 결정할 수없는 것처럼 보입니다. /* out << t; */을 주석 처리하면 컴파일 작업이 정상적으로 처리됩니다.

이 문제를 어떻게 해결할 수 있습니까? 나는 gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)을 사용합니다. env 유형 Envir이다

+1

자세한 정보가있을 수 있습니까? 예를 들어,이 템플릿을 어디에 선언했으며 다른 요소의 유형은 무엇입니까? – Morwenn

+0

전체 오류 게시. 이 템플릿 인스턴스화에서'T '가 무엇인지 알 수 없습니다. – Oktalist

답변

0

당신은 당신의 코드에서이 곳이 있다면,

long x = 1; 
env << x; 

는 다음 템플릿은 ostream의 올바른 스트리밍 연산자를 호출 명확하게 해결해야한다.

그래서 오류는 어딘가에서 템플릿 정의 자체가 발생합니다 생각합니다. 이 같은 아마 어딘가에 당신이했던 일 : env은 어떻게 든 Envir하고있다

env << n; 

, nlong 또는 unsigned long에 캐스트 할 수있는 타입이지만, 그것은 ostream::operator<<을위한 어떤 형식이 아닙니다 함수가 정의되었습니다. 어떤 유형인지 알 수가 없습니다.