找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 1313|回复: 9

模版问题 怎么编译不过去了?

[复制链接]
发表于 2009-11-2 01:55:40 | 显示全部楼层 |阅读模式 IP:江苏扬州
template<class Type,int size>
Type min(Type (&r_array)[size])
{
Type min_val=r_array[0];
for(i=1;i<size;++i)
if(min_val>r_array[i])
min_val=r_array[i];
return min_val;
}
int ia[]={1,5,7,9,0};
double da[]={1.2,2.5,6.1,9.8,10.6};
#include<iostream>
using namespace std;
int main()
{
int i=min(ia);
if(i!=0)
cout<<"错误"<<endl;
else cout<<"正确"<<endl;
double d=min(da);
if(d!=1.2)
cout<<"错误"<<endl;
else cout<<"正确"<<endl;
return 0;
}
发表于 2009-11-2 01:55:43 | 显示全部楼层 IP:江苏扬州
我用DEV-C++就能编译的过去,不知道为什么
回复

使用道具 举报

发表于 2009-11-2 01:55:45 | 显示全部楼层 IP:江苏扬州
C:\Program Files\Microsoft Visual Studio\MyProjects\123213\2313.cpp(2) : error C2265: '<Unknown>' : reference to a zero-sized array is illegal
C:\Program Files\Microsoft Visual Studio\MyProjects\123213\2313.cpp(16) : error C2784: 'Type __cdecl min(Type (&)[1])' : could not deduce template argument for ' (&)[1]' from 'int [5]'
C:\Program Files\Microsoft Visual Studio\MyProjects\123213\2313.cpp(20) : error C2784: 'Type __cdecl min(Type (&)[1])' : could not deduce template argument for ' (&)[1]' from 'double [5]'
Error executing cl.exe.
回复

使用道具 举报

发表于 2009-11-2 01:55:47 | 显示全部楼层 IP:江苏扬州
程序代码:

template<class Type>

Type min(Type * r_array, int size)
{
Type min_val = 0;
if(r_array && size>0)
{
min_val = r_array[0];
for(int i=1;i<size;++i)
{
if(min_val>r_array[i])
{
min_val=r_array[i];
}
}
}
return min_val;
}

#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int ia[]={1,5,7,9,0};
double da[]={1.2,2.5,6.1,9.8,10.6};
int size_ia = sizeof(ia)/sizeof(int);
int size_da = sizeof(da)/sizeof(double);
int i=min(ia, size_ia);
if(i!=0)
cout<<"it is wrong"<<endl;
else
cout<<"it is right"<<endl;
double d = min(da, size_da);
if(d!=1.2)
cout<<"it is wrong"<<endl;
else
cout<<"it is right"<<endl;
system("pause");
return 0;
}
回复

使用道具 举报

发表于 2009-11-2 01:55:49 | 显示全部楼层 IP:江苏扬州
楼主用什么编译器编不过去阿?
我用Borland C++可以编过去。

不过要把for(i=1;i<size;++i) ,这个改成for(int i=1;i<size;++i) ,因为i没定义。
回复

使用道具 举报

发表于 2009-11-2 01:55:51 | 显示全部楼层 IP:江苏扬州
kai的代码很经典阿。我得好好学习一下~,养成好的编码习惯。
回复

使用道具 举报

发表于 2009-11-2 01:55:53 | 显示全部楼层 IP:江苏扬州
啊..我用的VC++6 我用DEV能编译的过去,不知道为啥
回复

使用道具 举报

发表于 2009-11-2 01:55:55 | 显示全部楼层 IP:江苏扬州
kai 能告诉我 我的那个怎么在VC++编译不过去么
回复

使用道具 举报

发表于 2009-11-2 01:55:56 | 显示全部楼层 IP:江苏扬州
我们先撇开编译器的差别, 来看下面一段代码:

int n;
int a[n]; 你知道我想说什么了吧?

有一点是不会错的, 那就是当你在定义一个数组的时候, 你必须同时将他的长度确定下来, 也就是说, 你不能让一个数组的长度成为一个不确定的量.

出于这个考虑, VC 不能让你的程序通过.

if(r_array && size>0) // 对于这行代码你怎么看? 你是不是觉得多余?

随着编程的经验的积累, 我越来越觉得安全的重要性, 我觉得一个函数应该尽量不要别人的照顾, 这句话怎么来理解? 我的意思是说, 当你在写一个函数时, 你应该考虑这样一个问题, 这个函数在怎么样一个前提下才能安全运行, 或者说, 这个函数的安全运行有没有先决条件? 如果有, 那么这个函数本身就应该自身设防, 他的自身的安全不应由别人来负责.

我前几天浏览了Mozilla的网页, Mozilla提到了他们公司的代码风格, 其中提到了我上面所说的这一点,我非常认同Mozilla的这一观点. 因为一个函数很有可能在代码的不同段被调用, 如果函数能够为其自身安全负责,那么安全系数就会提高很多. 要知道, 程序员粗心的几率是很高的, 但是如果你书写代码保持这样的风格, 那么可以将危险系数降到最低.

此外, 不管循环语句或判断语句中是否需要花括号, 一律括上括号. 这一点我非常认同.
你的代码中, 我也没有完全帮你改过来.
比如
for(int i = 0; i<10; i++)
{
cout<<"hello ";
}

不过, Mozilla 的有些观点, 我是绝对反对的, 根深蒂固反对的. 由于Mozilla 聚集了很多Linux程序员, 他们有一个让我非常反感的习惯, 那就是起始花括号的位置的问题,
你经常会看到这样的代码风格, 比如这样:

void func(){ // 注意这里, 那个起始花括号直接跟在了函数名之后, I must say, NO!NO!NO!
// function body
}

我个人认为这样的风格很丑陋, it's terrible.
很多Java 程序员也是这样写代码, 在看这样的代码之前, 我必须将那些花括号对齐. 在这一点上, 我是坚持的, 而且很固执, 决不妥协.
回复

使用道具 举报

发表于 2009-11-2 01:55:58 | 显示全部楼层 IP:江苏扬州
明白了,谢谢~~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 23:25 , Processed in 0.275593 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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