0

operator<< をオーバーロードする C++ のこのテンプレートを使用

template<typename T> cEnvir& operator<<(const T& t) {out << t; return *this;}

このあいまいなエラーがあります。

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>]

...

問題は、タイプ名 T の場合、コンパイラが一致を判断できないようです。をコメントアウトする/* out << t; */と、コンパイルは正常に機能します。

この問題を解決するにはどうすればよいですか? 私は使用しますgcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)

4

1 に答える 1