Function Template Specialization Error

こ雲淡風輕ζ 提交于 2019-12-25 04:19:12

问题


I am trying to specialize my function template for list of int pointers.

template <typename typ>
void sortowanie(typ *tablica, int rozmiar, Komparator<typ> *komparator)
{
    int p;
    for(int j = rozmiar - 1; j > 0; j--)
    {
        p = 1;
        for(int i = 0; i < j; i++)
            if(komparator->porownaj(tablica[i], tablica[i + 1]))
            {
                typ pom = tablica[i];
                tablica[i] = tablica[i + 1];
                tablica[i + 1] = pom;
                p = 0;
            }
        if(p) break;
    }
};

template<>
void sortowanie<int *>(int **tablica, int rozmiar, Komparator<int> *komparator)
{
    int p;
    for(int j = rozmiar - 1; j > 0; j--)
    {
        p = 1;
        for(int i = 0; i < j; i++)
            if(komparator->porownaj(*tablica[i], *tablica[i + 1]))
            {
                int *pom = tablica[i];
                tablica[i] = tablica[i + 1];
                tablica[i + 1] = pom;
                p = 0;
            }
        if(p) break;
    }
};

But I get the following errors:

obliczenia.cpp:43:10: error: template-id ‘sortowanie<int*>’ for ‘void obliczenia::sortowanie(int**, int, Komparator<int>*)’ does not match any template declaration
void sortowanie<int*>(int* * tablica, int rozmiar, Komparator<int> *komparator) {
              ^
obliczenia.cpp:43:10: error: template-id ‘sortowanie<int*>’ for ‘void obliczenia::sortowanie(int**, int, Komparator<int>*)’ does not match any template declaration
void sortowanie<int*>(int* * tablica, int rozmiar, Komparator<int> *komparator) {

回答1:


Perhaps this is a typo.

In the generic template version, you have:

template <typename typ>
void sortowanie(typ *tablica, int rozmiar, Komparator<typ> *komparator) {

In the specialization, you have:

template<>
void sortowanie<int*>(int* * tablica, int rozmiar, Komparator<int> *komparator) {
                                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^

I suspect you mean that to be: Komparator<int*> *komparator.

Without that, the function can be an overload but it can't be a template specialization. In that case, you need to remove the template <> before the function declaration.



来源:https://stackoverflow.com/questions/29928891/function-template-specialization-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!