类模板特化,c++,模板形参列表中参数2不匹配

Class Template Specialisation, C++, mismatch at argument 2 in template parameter list

本文关键字:参数 不匹配 列表 形参 c++ 类模板特化      更新时间:2023-10-16

我有一个模板:

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的类型/值不匹配for ' template class Array ' |

怎么了?

奇怪。我将代码更改为以下代码:

template <>
class Array<Data, 20>
{
};
int main()
{
    Array<Data, 20> tab;
    return 0;
}

现在好了。谢谢!

我只能猜测你实际上想要为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;
}