功能模板专业化错误 [英] Function Template Specialization Error

查看:122
本文介绍了功能模板专业化错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将我的函数模板专用于int指针列表.

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

但是我遇到以下错误:

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) {

推荐答案

也许这是一个错字.

在通用模板版本中,您具有:

In the generic template version, you have:

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

在专业化领域,您有:

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

我怀疑您的意思是:Komparator<int*> *komparator.

没有这个功能,该函数可以是重载,但不能是模板专门化.在这种情况下,您需要在函数声明之前删除template <>.

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.

这篇关于功能模板专业化错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆