函数对象 泛型设计 stl c++

#include<algorithm>#include<vector>#include<functional>#include<iostream>usingnamespa... #include <algorithm>
#include <vector>
#include <functional>
#include <iostream>
using namespace std;

template< typename Type >
class lessEqualOs:
public binary_function< Type, Type, bool > {
public:
lessEqualOs(
ostream &_os = cout,
const string &_interval = string(),
bool _left = true
): os( _os ), interval( _interval ), left( _left ) {}
bool operator()( const Type &_left, const Type &_right ) const {
bool ret = _left < _right;
if( ret ) {
os <<( left ? _left : _right )<< interval;
}
return ret;
}
private:
ostream &os;
string interval;
bool left;
};//函数对象,比较两个数大小,将较小者或较大者输出

int main() {
vector< int > ivec;
for( int i=0; i<10; ++i ) {
int temp;
cin >> temp;
ivec.push_back( temp );
}
int res = count_if( ivec.begin(), ivec.end(), bind1st( lessEqualOs< int >( cout, ", ", false ), 1024 ) );//希望同时统计并输出大于1024的数字
cout << res << endl;
return 0;
}

环境vs2008
编译错误的信息太长不能打上来
去掉 operator()()中的os <<( left ? _left : _right )<< interval;就能正常通过。int和ostream在调用点上应该是可见的的啊。

vs2008的错误太长了,我打vc6.0的错误吧

--------------------Configuration: 模板函数 - Win32 Debug--------------------
Compiling...
模板函数.cpp
C:\Documents and Settings\Administrator\模板函数.cpp(19) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' (or th
ere is no acceptable conversion)
C:\Documents and Settings\Administrator\模板函数.cpp(16) : while compiling class-template member function 'bool __thiscall lessEqualOs<int>::operator ()(const int &,const int &) const'
Error executing cl.exe.

模板函数.obj - 1 error(s), 0 warning(s)

没人答。。。唉,大牛都不关心百度知道的,这样中国的it怎么发展。
展开
 我来答
bluebaby9811
2009-10-18 · TA获得超过235个赞
知道答主
回答量:75
采纳率:0%
帮助的人:118万
展开全部
可能是因为operator()()被声明为const,而又访问了非const的os和interval成员所至。你把operator()()的const属性去掉试试。
编译错误的大体意思就是:没有为右操作数为const string类型重载"<<"操作符。不知是不是这样呢!
清影星河6A
2009-10-19 · TA获得超过851个赞
知道小有建树答主
回答量:753
采纳率:0%
帮助的人:899万
展开全部
这大概只是个基本的STL问题吧,改成这样不就可以了:
os <<( left ? _left : _right )<< interval.c_str();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沉思ing
2009-10-19 · TA获得超过141个赞
知道答主
回答量:103
采纳率:0%
帮助的人:53万
展开全部
缺少头文件
#include <string>

未知的类型导致了编译器找不到<<匹配的模板
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yesod
2009-10-18 · TA获得超过444个赞
知道答主
回答量:251
采纳率:0%
帮助的人:0
展开全部
g++编译通过,运行正常

能不能把编译错误打出来看看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式