关于C++的模板问题

xuru1990 2010-06-06 03:48:25
#include "iostream.h"
#include "conio.h"
template<class T>
typedef struct {
T a;
T b;
}st;
T maxx(st x)
{
if(x.a>x.b)return x.a;
else return x.b;
}
void main()
{
cout<<maxx(4.6,7.8);
cout<<endl<<maxx(5,8);
}
请教!为什么 T这个类型不可以在struct中运用,他不是表示一个类型么,帮忙解释一下!!万分感谢!!
...全文
136 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2010-06-10
  • 打赏
  • 举报
回复
楼主,珍惜生命,远离VC6
xuru1990 2010-06-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hpsmouse 的回复:]
C/C++ code
#include <iostream>
template<class T>
struct st { //这个 typedef 跟 C 学的吧……
T a;
T b;
st(T _a, T _b) : a(_a), b(_b) {} //如果想直接用两个量初始化,必须定义构造函数
};

[/Quote]
谢谢啦!!
wade_2003 2010-06-10
  • 打赏
  • 举报
回复
顺便学习了
xuru1990 2010-06-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 pengzhixi 的回复:]
在模板参数未确定之前,模板类就不是一个确定的类型,你就不可能用typedef,而且,模板类的模板参数是需要显示指定的,编译器是不会推导的
[/Quote]
学习了!谢谢!
2010-06-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xuru1990 的回复:]

为什么,不懂,这个笑话不好笑哦,我正在学那个呢!!
[/Quote]
不好笑就对了,因为这个不是笑话……
pengzhixi 2010-06-10
  • 打赏
  • 举报
回复
在模板参数未确定之前,模板类就不是一个确定的类型,你就不可能用typedef,而且,模板类的模板参数是需要显示指定的,编译器是不会推导的
xuru1990 2010-06-10
  • 打赏
  • 举报
回复
为什么,不懂,这个笑话不好笑哦,我正在学那个呢!!
上善若水邻 2010-06-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hpsmouse 的回复:]
C/C++ code
#include <iostream>
template<class T>
struct st { //这个 typedef 跟 C 学的吧……
T a;
T b;
st(T _a, T _b) : a(_a), b(_b) {} //如果想直接用两个量初始化,必须定义构造函数
};

template <class T> //这里也是个模……
[/Quote]
这个没问题。。。。
可能是你的编译器问题
xuyingfeng 2010-06-06
  • 打赏
  • 举报
回复
struct中好像不能用class定义类型,这个问题我以前测试过,用不成的。
ameyume 2010-06-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hpsmouse 的回复:]
C/C++ code
#include <iostream>
template<class T>
struct st { //这个 typedef 跟 C 学的吧……
T a;
T b;
st(T _a, T _b) : a(_a), b(_b) {} //如果想直接用两个量初始化,必须定义构造函数
};

template <class T> //这里也是个模……
[/Quote]
学习,刚才翻书也没有解决
template <class T> //这里也是个模板函数
T maxx(st<T> x)
这个编译不过的问题。
2010-06-06
  • 打赏
  • 举报
回复
#include <iostream>
template<class T>
struct st { //这个 typedef 跟 C 学的吧……
T a;
T b;
st(T _a, T _b) : a(_a), b(_b) {} //如果想直接用两个量初始化,必须定义构造函数
};

template <class T> //这里也是个模板函数
T maxx(st<T> x)
{
if(x.a>x.b)
return x.a;
else
return x.b;
}

int main()
{
using std::cout;
using std::endl;
cout<<maxx(st<double>(4.6,7.8))<<endl; //类的构造函数不支持直接使用模板参数解析,只能自己指定模板参数
cout<<maxx(st<int>(5,8))<<endl;
}
ww884203 2010-06-06
  • 打赏
  • 举报
回复
没看明白你的意图。
但是我感觉,你的maxx函数,没有定义模板却用了模板的方式
ameyume 2010-06-06
  • 打赏
  • 举报
回复
帮顶,顺便学习一下

65,210

社区成员

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

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