【发布时间】:2016-10-08 12:21:04
【问题描述】:
我有一个模板:
template <typename T, int size>
class Array
{
T A[size];
public:
T& operator[](int index) ;
};
template <typename T, int size>
T& Array<T,size>::operator[](int index)
{
if (index>=size || index<0)
return A[0];
else
return A[index];
}
及其特化类:
typedef struct Data
{
int id;
char name[10];
double temp;
double quantity;
}Data;
template <>
class Array<Data, int>
{
};
我尝试使用它:
int main()
{
Array<Data, int> tab;
return 0;
}
但是我收到了这个错误,我真的不知道为什么:
错误:模板参数列表中参数 2 的类型/值不匹配 对于‘模板类数组’|
怎么了?
这很奇怪。我将代码更改为以下代码:
template <>
class Array<Data, 20>
{
};
int main()
{
Array<Data, 20> tab;
return 0;
}
现在可以了。谢谢!
【问题讨论】:
-
您的第二个模板参数需要
int,而不是类型。 -
@tkausl:当我删除
int时,错误变为error: wrong number of template arguments (1, should be 2)|error: provided for ‘template<class T, int size> class Array’|