关于template中operator的问题

skineffect 2008-09-19 01:00:34
#include<iostream>
using namespace std;
template<class T> struct plus{
T operator()(const T& x,const T& y)const{
return x+y;
}
};
template<class T> struct minus{
T operator()(const T& x,const T& y)const{
return x-y;
}
};
int main(){
plus<int> plusobj; //在编译时说plus没定义。
minus<int> minusobj;
cout<<plusobj(3,5)<<endl;
cout<<minusobj(3,5)<<endl;

cout<<plus<int>()(43,50)<<endl;//这两句的语法比较诡异,是将plus<int>()当成一个函数名了吗?
cout<<minus<int>()(43,50)<<endl;
}

rt,上面的程序在devC++中编译出问题如下:
14 E:\skin\学习\C++相关\stl源码剖析\opertor多载化.cpp `plus' undeclared (first use this function) 
14 E:\skin\学习\C++相关\stl源码剖析\opertor多载化.cpp expected primary-expression before "int"
。。。。。。。。。。。。。。

最近被template搞的很崩溃,想学学stl所以先看了看template。应该怎样学stl最好呢,大牛们给给建议吧。
...全文
241 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yshuise 2008-09-19
  • 打赏
  • 举报
回复
std::cout<<plus<int>()(43,50)<<std::endl;//这两句的语法比较诡异,是将plus<int>()当成一个函数名了吗?
std::cout<<minus<int>()(43,50)<<std::endl;

这两句应该这样理解吧:
plus<int>()因该是一个临时对象,遇到参数43,50时,触发()函数
就呆在云上 2008-09-19
  • 打赏
  • 举报
回复
vs
2005 没有问题啊
skineffect 2008-09-19
  • 打赏
  • 举报
回复
果然是域的问题,谢谢了,一会给分。
lann64 2008-09-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yshuise 的回复:]
楼主我在vc2003下能运行。估计就是plus,在stl库里面有这个函数,你改一下名字试试。
[/Quote]
正解
#include<iostream>
//using namespace std;
template<class T> struct plus{
T operator()(const T& x,const T& y)const{
return x+y;
}
};
template<class T> struct minus{
T operator()(const T& x,const T& y)const{
return x-y;
}
};
int main(){
plus<int> plusobj; //在编译时说plus没定义。
minus<int> minusobj;
std::cout<<plusobj(3,5)<<std::endl;
std::cout<<minusobj(3,5)<<std::endl;

std::cout<<plus<int>()(43,50)<<std::endl;//这两句的语法比较诡异,是将plus<int>()当成一个函数名了吗?
std::cout<<minus<int>()(43,50)<<std::endl;
}
AlwaysSLH 2008-09-19
  • 打赏
  • 举报
回复
用::puls 和 ::minus就好了,估计是编译器域解释的问题
太乙 2008-09-19
  • 打赏
  • 举报
回复
devC++对struct的支持和vc不大一样!
wangdeqie 2008-09-19
  • 打赏
  • 举报
回复

#include<iostream>
#include <math.h>
#include <functional>
using namespace std;
template<class T> struct Plus
{
T operator()(const T& x,const T& y)const
{
return x+y;
}
};
template<class T> struct Minus
{
T operator()(const T& x,const T& y)const
{
return x-y;
}
};
int main()
{
Plus<int> plusobj; //在编译时说plus没定义。
Minus<int> minusobj;
cout<<plusobj(3,5)<<endl;
cout<<minusobj(3,5)<<endl;

cout<<Plus<int>()(43,50)<<endl;//这两句的语法比较诡异,是将plus<int>()当成一个函数名了吗?
cout<<Minus<int>()(43,50)<<endl;
}

OenAuth.Core 2008-09-19
  • 打赏
  • 举报
回复
VC 6.0运行成功。呵呵,你用楼上的方法试试。
还有
cout<<plus<int>()(43,50)<<endl;//这两句的语法比较诡异,是将plus<int>()当成一个函数名了吗?
基本是这么理解的
AlwaysSLH 2008-09-19
  • 打赏
  • 举报
回复
vs2008通过,运行结果正确
theendname 2008-09-19
  • 打赏
  • 举报
回复
vs2005 编译通过
看些书就好
yshuise 2008-09-19
  • 打赏
  • 举报
回复
楼主我在vc2003下能运行。估计就是plus,在stl库里面有这个函数,你改一下名字试试。

65,187

社区成员

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

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