| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1298 人关注过本帖
标题:模版问题 怎么编译不过去了?
只看楼主 加入收藏
dang800919
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2005-12-5
收藏
 问题点数:0 回复次数:13 
模版问题 怎么编译不过去了?
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;
}
搜索更多相关主题的帖子: 模版 编译 
2006-02-16 14:38
dang800919
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2005-12-5
收藏
得分:0 

我用DEV-C++就能编译的过去,不知道为什么

2006-02-16 14:53
dang800919
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2005-12-5
收藏
得分:0 
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.
2006-02-16 14:53
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 

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;
}


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2006-02-16 15:16
柳儿
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:1830
专家分:30
注 册:2004-9-23
收藏
得分:0 
楼主用什么编译器编不过去阿?
我用Borland C++可以编过去。

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

成功会使人骄傲。如果你骄傲自大,你就会停止学习。不学习,人就停止了进步
2006-02-16 15:20
柳儿
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:1830
专家分:30
注 册:2004-9-23
收藏
得分:0 
kai的代码很经典阿。我得好好学习一下~,养成好的编码习惯。

成功会使人骄傲。如果你骄傲自大,你就会停止学习。不学习,人就停止了进步
2006-02-16 15:22
dang800919
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2005-12-5
收藏
得分:0 
啊..我用的VC++6 我用DEV能编译的过去,不知道为啥
2006-02-16 15:23
dang800919
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2005-12-5
收藏
得分:0 
kai 能告诉我 我的那个怎么在VC++编译不过去么
2006-02-16 15:25
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
我们先撇开编译器的差别, 来看下面一段代码:

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 程序员也是这样写代码, 在看这样的代码之前, 我必须将那些花括号对齐. 在这一点上, 我是坚持的, 而且很固执, 决不妥协.

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2006-02-16 16:01
dang800919
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2005-12-5
收藏
得分:0 
明白了,谢谢~~~
2006-02-16 16:11
快速回复:模版问题 怎么编译不过去了?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.074051 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved