LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 496|回复: 6

模板

[复制链接]
发表于 2004-9-28 17:31:29 | 显示全部楼层 |阅读模式
程序错在哪里?
谢谢。

  1. #include <iostream>
  2. using namespace std;

  3. template <class T>
  4. T max (T x, T y) {   //
  5.    return (x>y)? (x):(y);  //这个表情本来是一个冒号和(
  6. }

  7. int main () {
  8.    int x=3, y=4;
  9.    double a=1.1, b=3.4;
  10.    cout<<max(x, y)<<endl;   //
  11.    cout<<max(a, b)<<endl;
  12. }

  13. /*
  14. [root@localhost c08]# g++ p149.cpp -o p149
  15. p149.cpp: In function `int main()':
  16. p149.cpp:12: error: call of overloaded `max(int&, int&)' is ambiguous
  17. p149.cpp:5: error: candidates are: T max(T, T) [with T = int]
  18. /usr/include/c++/3.3.2/bits/stl_algobase.h:169: error:                 const
  19.    _Tp& std::max(const _Tp&, const _Tp&) [with _Tp = int]
  20. p149.cpp:13: error: call of overloaded `max(double&, double&)' is ambiguous
  21. p149.cpp:5: error: candidates are: T max(T, T) [with T = double]
  22. /usr/include/c++/3.3.2/bits/stl_algobase.h:169: error:                 const
  23.    _Tp& std::max(const _Tp&, const _Tp&) [with _Tp = double]
  24. (i-search)`':
  25. */
复制代码
发表于 2004-9-28 20:55:27 | 显示全部楼层
看样子,max这个函数名可能与STL中定义的函数重名了。改成max1试试。
 楼主| 发表于 2004-9-30 19:34:14 | 显示全部楼层
改个名就没事了。
谢谢。
 楼主| 发表于 2004-10-9 15:02:59 | 显示全部楼层
return (x>y)? (x)y);
这个冒号是什么意思?
发表于 2004-10-9 15:06:27 | 显示全部楼层
这是三目操作符。你可以去看看C++教材中有关操作符的部分。
以后贴代码请尽量用[code],同时发贴时先选择预览回复,禁止表情符号。
 楼主| 发表于 2004-10-9 15:08:26 | 显示全部楼层
冒号和左括号自动变成了表情符号,
我原以为是用code的缘固。
 楼主| 发表于 2004-10-9 18:42:13 | 显示全部楼层
http://www.mastvu.ah.cn/zks/zcfw/list.asp?id=1192
9. 条件运算符

条件运算符(?是C++中唯一一个三目运算符,其使用格式为:

<表达式1> ? <表达式2> : <表达式3>

当计算由条件运算符构成的表达式时,首先计算<表达式1>,若其值非0则计算出<表达式2>的值,这个值就是整个表达式的值;若<表达式1>的值为0,则计算出<表达式3>的值,它就是整个表达式的值。如:

(1) a=(x>y ? x : y) //若x>y为真则把x的值赋给a,否则把y的值赋给a

(2) x?y=a+10:y=3*a-1 //若x非0则把a+10的值赋给y,否则把3*a-1的值赋y
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表