类模板专业化,C ++,模板参数列表中参数2的不匹配

时间:2016-10-08 12:21:05

标签: c++ templates

我有一个模板:

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;
}

现在好了。谢谢!

1 个答案:

答案 0 :(得分:2)

我只能猜测您实际想要为Array<T, size>创建模板专精的内容,其中未指定T=Datasize

template <int size>
class Array<Data, size> // partial specialization
{
};

实例化模板时,必须指定常量大小:

int main()
{
    Array<Data, 5> tab; // size=5 for this example
    return 0;
}