template问题,大家帮忙看看!在线等

caferd 2002-07-17 06:02:28
源代码如下

#include "stdafx.h"
#include <iostream>
using namespace std;
template<class type,int size> type min(const type (&array)[size])
{
cout<<"test ok size="<<size<<endl;
return 0;
}
int main(int argc, char* argv[])
{
int a[5]={1,2,3,4,5};
int i=min(a);

return 0;
}

为什么编译说reference to a zero-sized array is illegal
size我应该是template实力化的时候才传的啊,迷惑中.......
...全文
86 35 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
hellwolf 2002-07-18
  • 打赏
  • 举报
回复
vc.net改进了,可以通过了
hellwolf 2002-07-18
  • 打赏
  • 举报
回复
vc6对模板支持的的问题
vc中折衷的办法改用:
template <typename T>
int len (const T& t){
return sizeof(t)/sizeof(t[0]);
}

这是一个比较老的bug了,很多文章都写过了
icuc88 2002-07-18
  • 打赏
  • 举报
回复
我倒,VC是什么?

M$总是有自己的标准的,HTML-->DHTML, CSS, C#, JAVA...M$不是都有自己的一套烂东西吗?

VC对STL支持也不是很好!

这样的编译器对学C++好吗?
LeeMaRS 2002-07-18
  • 打赏
  • 举报
回复
看来似乎是VC6还支持得不够好的问题了,在VC6是一个都编译不通过.
Oversense 2002-07-18
  • 打赏
  • 举报
回复
有些人不懂不要乱说好不好
#include <iostream>
using namespace std;
template<class type,int size> type min(const type (&array)[size])
{
cout<<"test ok size="<<size<<endl;
return 0;
}
int main(int argc, char* argv[])
{
const int a[5]={1,2,3,4,5};
int i=min(a);

return 0;
}
在VC7.0 g++ 3.1 下编译通过


#include <iostream>
using namespace std;
template<class type,int size> type min(type (&array)[size])
{
cout<<"test ok size="<<size<<endl;
return 0;
}
int main(int argc, char* argv[])
{
int a[5]={1,2,3,4,5};
int i=min(a);

return 0;
}
在VC7.0,g++3.1下编译通过

type (&array)[size]
这种东西编译不通过不是荒唐了?
int a[5];
我们看到a,就知道他是一个数组,同时知道type = int , size = 5;

#include <iostream>
using namespace std;
template<class type,int size> type min(const type (&array)[size])
{
cout<<"test ok size="<<size<<endl;
return 0;
}
int main(int argc, char* argv[])
{
int a[5]={1,2,3,4,5};
int i=min(a);

return 0;
}
在VC7.0编译通过,g++3.1编译不通过

模板实参推演能够进行的转化非常有限
但是限定转换是允许的,上面非const转化到const
也就是应该允许的
maoxianwang 2002-07-18
  • 打赏
  • 举报
回复
C++ Primer太贵了

128块钱啊

我吐
caferd 2002-07-17
  • 打赏
  • 举报
回复
代码的效率易用性不就是我们要最求的吗?没有好的技术基础那来的优秀产品,
看到困难就想道绕路,永远也不能战胜困难,你说呢?
heartup 2002-07-17
  • 打赏
  • 举报
回复
能够用别的代替的东西,为什么要死死追求一种做法呢?
编程应该把重点放在编码上,而不是一些小小的技巧。你说呢?
caferd 2002-07-17
  • 打赏
  • 举报
回复
好像是VC的问题了,但应该有补救的方法
heartup 2002-07-17
  • 打赏
  • 举报
回复
首先祝贺你,你很有钱呀!能买得到C++ Primer这样的书。
我以前不知道数组引用,刚才到书店看后才知道数组竟然也能引用。
照理说呢,应该能推演出size的值。我觉得也是VC的问题了。

zengpan_panpan 2002-07-17
  • 打赏
  • 举报
回复
估计都会说自己完全支持。
e2wugui 2002-07-17
  • 打赏
  • 举报
回复
完全支持标准的编译器有吗?
caferd 2002-07-17
  • 打赏
  • 举报
回复
大家再加油试试
zengpan_panpan 2002-07-17
  • 打赏
  • 举报
回复
而且标准也不一定绝对正确。
zengpan_panpan 2002-07-17
  • 打赏
  • 举报
回复
primer是叙述标准,不一定所有实现都完全遵守。
caferd 2002-07-17
  • 打赏
  • 举报
回复
所以要问阿
LeeMaRS 2002-07-17
  • 打赏
  • 举报
回复
我只听说C++ Primer上面也有很多的错误,不知道是不是真的。
caferd 2002-07-17
  • 打赏
  • 举报
回复
大家应该看看出错的提示
caferd 2002-07-17
  • 打赏
  • 举报
回复
zengpan_panpan(),现在关键是Vc通不过,你知道为什么吗?
caferd 2002-07-17
  • 打赏
  • 举报
回复
大家注意一点,Pirmer上的实例明确表示了可以推出size的值
加载更多回复(15)

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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