熟悉STL的麻烦请帮下忙

dizengrong 2009-03-29 10:58:12
#include <iostream>
#include <vector>
#include <functional>
#include <cmath>
#include <algorithm>
using namespace std;
template <class OP1,class OP2>
class compose_f_gx : public unary_function<typename OP2::argument_type,typename OP1::result_type>
{
private:
OP1 op1;
OP2 op2;
public:
compose_f_gx(const OP1& o1,const OP2& o2) : op1(o1),op2(o2)
{}
typename OP1::result_type operator() (const typename OP2::argument_type& x) const
{
return op1(op2(x));
}
};
template <class OP1,class OP2>
inline compose_f_gx<OP1,OP2>
compose_f_gx(const OP1& o1,const OP2& o2)
{
return compose_f_gx<OP1,OP2>(o1,o2);
}//在此提示了:error C2904: “compose_f_gx”: 名称已经用于当前范围内的模板
int main()
{
vector<int> coll;
for(int i=0;i<9;i++)
coll.push_back(i+1);
copy(coll.begin(),coll.end(),ostream_iterator<int>(cout," "));
cout<<endl<<endl;
transform(coll.begin(),coll.end(),ostream_iterator<int>(cout," "),compose_f_gx(bind2nd(multiplies<int>(),5),bind2nd(plus<int>(),10)));
cout<<endl;
}]
我这段代码是我从C++标准程序库(Nicolai M.Josuttis著)的第315页摘抄下来的,可编译出错了,
错误如注释所述,麻烦懂得STL的帮我看看,怎么改。
...全文
135 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dizengrong 2009-03-31
  • 打赏
  • 举报
回复
Thank you all,especially Loaden.
You replies are helpful to me!
皮蛋C 2009-03-30
  • 打赏
  • 举报
回复
template <class OP1,class OP2>
inline compose_f_gx <OP1,OP2>::
compose_f_gx(const OP1& o1,const OP2& o2)
{
return compose_f_gx <OP1,OP2>(o1,o2);
}//


compose_f_gx(const OP1& o1,const OP2& o2) : op1(o1),op2(o2)
{} 这里就不要在实现了,直接声明即可.compose_f_gx(const OP1& o1,const OP2& o2);
老邓 2009-03-30
  • 打赏
  • 举报
回复
#include <iostream>
#include <vector>
#include <functional>
#include <cmath>
#include <algorithm>
using namespace std;
template <class OP1, class OP2>
class compose_f_gx : public unary_function <typename OP2::argument_type, typename OP1::result_type>
{
private:
OP1 op1;
OP2 op2;
public:
compose_f_gx(const OP1& o1, const OP2& o2) : op1(o1), op2(o2)
{}
typename OP1::result_type operator()(const typename OP2::argument_type& x) const
{
return op1(op2(x));
}
};

template <typename OP1, typename OP2>
inline compose_f_gx <OP1, OP2> compose_f_gx2(const OP1& o1, const OP2& o2)
{
return compose_f_gx<OP1, OP2>(o1, o2);
}//在此提示了:error C2904: “compose_f_gx”: 名称已经用于当前范围内的模板

int main()
{
vector <int> coll;
for (int i = 0;i < 9;i++)
coll.push_back(i + 1);
copy(coll.begin(), coll.end(), ostream_iterator <int>(cout, " "));
cout << endl << endl;
transform(coll.begin(), coll.end(), ostream_iterator <int>(cout, " "), compose_f_gx2(bind2nd(multiplies <int>(), 5), bind2nd(plus <int>(), 10)));
cout << endl;
}

输出:
1 2 3 4 5 6 7 8 9

55 60 65 70 75 80 85 90 95

compose_f_gx 改成 compose_f_gx2

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧