可能重复:
std::endl is of unknown type when overloading operator<<
#include <iostream>
using namespace std;
struct OutputStream
{
template<class T>
OutputStream& operator <<(const T& obj)
{
cout << obj;
return *this;
}
};
OutputStream os;
int main()
{
os << 3.14159 << endl; // Compilation Failure!
}
VC ++ 2012编译器抱怨:
错误C2676:二进制'&lt;&lt;' :'OutputStream'未定义此运算符或转换为预定义运算符
可接受的类型
答案 0 :(得分:4)
原因是编译器无法推断出T
的类型,因为std::endl
是一个定义为
template <class charT, class traits>
basic_ostream<charT,traits>& endl ( basic_ostream<charT,traits>& os );
在IOStreams中克服它的方法是提供operator<<
的适当重载:
OutputStream& operator <<(std::ostream& ( *pf )(std::ostream&))
{
cout << pf;
return *this;
}