这样的模版vc下是不是不能通过编译?

djs36 2004-12-26 11:14:37
template <typename Type,int size>
Type min( Type (&r_array)[size])
{
Type min_val=r_array[0];
for(int i=1;i<size;i++)
{
if(r_array[i]<min_val)min_val=r_array[i];
}
return min_val;
}
...全文
185 点赞 收藏 17
写回复
17 条回复
sandrowjw 2004年12月27日
标准里函数模板是不支持缺省参数的
回复 点赞
zhengwei1984222 2004年12月27日
呵呵楼主代码出现这个错误,有趣
error C2265: '<Unknown>' : reference to a zero-sized array is illegal
回复 点赞
zhengwei1984222 2004年12月27日
不过是不是c++标准还不肯定!
手头没。net
大家看看这段代码在net中有warning没?
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
template <typename T = int,int MAXSIZE = 100>
void add(T* det)
{
T temp = *det;
cout<<T(temp+MAXSIZE);
}

void main()
{
int a =100;
add(&a);
}
回复 点赞
zhengwei1984222 2004年12月27日
的确,vc6。0中不支持函数模板使用缺省参数
warning C4519: default template arguments are only allowed on a class template; ignored
回复 点赞
aming46 2004年12月27日
恩,我也是用 .net的 编译是没有问题,但是怎么使用楼主所写的那个函数呢?我就是不会调用,所以才换了一种申明。那个错误也就是在我错误的调用了那个函数发生的。

没有必要去讨论vc6的支持问题,他的确支持得挺差。。。。。。。
回复 点赞
aming46 2004年12月26日
........

上面两位编译通过了么??解释一下吧!

我这里是编译不通过的,“error C2784: “Type min(Type (&)[size])” : 未能推导出“T1 (&)[size]”(从“int”中)的模板参数”

我把函数申明改成这样了。。。。。可以,但是味道变了,还是请高手来吧。。。。
template <typename Type>
Type min( Type* r_array,int size)
回复 点赞
xuzheng318 2004年12月26日
vc2003.net 编译通过!
回复 点赞
fatalerror99 2004年12月26日
以上代码在 VC 2003 和 Dev-C++ 中均顺利通过编译。
回复 点赞
djs36 2004年12月26日
那我应该怎么修改?
回复 点赞
北极猩猩 2004年12月26日
在哪里都不行,C++标准理不支持函数模板使用费类型参数
回复 点赞
sandrowjw 2004年12月26日
果然不行,就是不支持那个整数参数
回复 点赞
sandrowjw 2004年12月26日
不行吗?普通的函数模板是可以的吧。
回复 点赞
fatalerror99 2004年12月26日
大家搞搞清楚,VC6 是98年的产品了,当年,它在与它同期的 C++ 开发环境中还算不错的,只是多年没有升级而以。
如今经过 VC 2002,直到 VC 2003,如果还抱着 VC 6 不放,还说不好,就有点别有用心了吧。

想问一下,还有没有人用 Windows 98?估计不会有了吧,同期的 VC 6 为什么就不肯扔掉呢?
回复 点赞
uframer 2004年12月26日
这又不是什么新闻,对标准支持最好的应该是vc2003和intel8.0,vc6对标准支持之差是出了名的
回复 点赞
sandrowjw 2004年12月26日
看来又是VC6一大罪状阿
回复 点赞
北极猩猩 2004年12月26日
不好意思,记错了,函数模板是可以有非类型参数的,不过函数模板不能有缺省参数
回复 点赞
fatalerror99 2004年12月26日
楼上用的是那个版本,在 VC 2003 下才可以编译通过,VC 6 可能不行。

在《C++ 程序设计语言》中有这样一段叙述:

模板可以有类型参数,可以有常规类型的参数如 int,还可以有模板参数。自然,一个模板可以有多个参数。例如,
template<class T, T def_val> class Cont { /*...*/ };
如上所示,一个模板参数可以用于定义跟随其后的模板参数。
整数参数常常给用于提供大小或者界限。例如,
template<class T, int i> class Buffer {
......

所以,楼主的程序是符合 C++ 标准的,至于是否能通过编译,只与编译器是否支持有关。
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告