我有一个模板:
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;
}
现在好了。谢谢!
答案 0 :(得分:2)
我只能猜测您实际想要为Array<T, size>
创建模板专精的内容,其中未指定T=Data
和size
。
template <int size>
class Array<Data, size> // partial specialization
{
};
实例化模板时,必须指定常量大小:
int main()
{
Array<Data, 5> tab; // size=5 for this example
return 0;
}