请问个数组作为模板类型参数的有关问题

请教个数组作为模板类型参数的问题
本帖最后由 greendayu2 于 2012-12-09 17:28:50 编辑
以下两端程序,为什么第一段编译不通过,第二段能编译通过呢?
在VS2010和GCC4.72上做的测试
template<typename T1>
struct test1
{
test1(T1 b){}
};
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
test1<int(&)[10]>(a);
}


template<typename T1,typename T2>
struct test1
{
test1(T1 b,T2 c){}
};
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
test1<int(&)[10],int>(a,5);
}


------解决方案--------------------
是你的语法不对。
第一个语法不对,编译器认为你在定义一个变量,但是这个变量被定义过了。

举个简单的例子。

class A
{
    A(int){}
}


A(a); // 这个就是定义变量a。当然了,调用A的构造,但是你没有提供无参的构造函数。
A(5); // 而这个就是调用A构造而已,


你的问题,
去掉括号就好了。

test1<int(&)[10]>(a);

=》

test1<int(&)[10]> b(a);