Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для h_wolf
11 / 11 / 2
Регистрация: 24.01.2013
Сообщений: 212

Явная специализация шаблона

01.10.2013, 13:15. Показов 1262. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Столкнулся с проблемой при изучении шаблонов.

Задача:
написать шаблонную функцию, которая принимает в качестве аргумента массив элементов Т и целое число, представляющее количество элементов в массиве, а возвращает элемент с наибольшим значением. Программа так же должна содержать специализацию, которая использует массив указателей на char в качестве первого аргумента и количество указателей в качестве второго, а затем возвращает адрес самой длинной строки.

Компилятор ругается на 7 и 55 строке: error: template-id 'maxn<char*>' for 'char* maxn(char*, int)' does not match any template declaration

Код:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
#include <cstring>
 
template <typename T>
T maxn(T* arr, int n);
 
template <> char* maxn<char*>(char* arr, int n);
 
using namespace std;
 
int main()
{
    int amount=0;
 
    cout<<"Input amount int val: ";
    cin>>amount;
    int* arr_int=new int[amount];
    cout<<"Input int val: ";
    for(int i=0; i<amount; i++)
        cin>>arr_int[i];
    cout<<"Max elemet of int arr is "<<maxn(arr_int, amount)<<endl;
    delete [] arr_int;
 
    cout<<"Input amount double val: ";
    cin>>amount;
    double* arr_double=new double[amount];
    cout<<"Input double val: ";
    for(int i=0; i<amount; i++)
        cin>>arr_double[i];
    cout<<"Max elemet of double arr is "<<maxn(arr_double, amount)<<endl;
    delete [] arr_double;
 
    cout<<"Input amount char strin val: ";
    cin>>amount;
    char** str=new char*[amount]; //количество строк
    for(int i=0; i<amount; i++)
        str[i]=new char[256];
    cout<<"Input the strings: ";
    for(int i=0; i<amount; i++)
        cin.get(str[i], 256);
    cout<<"Biggest string is: "<<maxn(str, amount);
 
    return 0;
}
 
template <typename T>
T maxn(T* arr, int n)
{
    T tmp=0;
    for(int i=0; i<n; i++)
        if(arr[i]>tmp)
            tmp=arr[i];
    return tmp;
}
template <> char* maxn<char*>(char* arr, int n)
{
    int Len_Str=0;
    char tmp[256];
    for(int i=0; i<n; i++)
        if(strlen(arr[i])>Len_Str){
            Len_Str=strlen(arr[i]);
            strcpy(tmp, arr[i]);
        }
        return tmp;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.10.2013, 13:15
Ответы с готовыми решениями:

Явная специализация шаблона
Здравствуйте. Не совсем разобрася с сабжем. Например, если есть кусочек кода: template &lt;typename T&gt; void func(T &amp;blue, T...

Явная специализация шаблона
Здравствуйте, подскажите, пожалуйста, почему не выполняется неявное приведение фактических параметров к формальным при вызове функции для...

Явная специализация шаблона. Ошибки
Помогите исправить ошибки. Надо для шаблонного класса сделать специализацию float #include &lt;iostream&gt; #include...

4
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
01.10.2013, 13:20
Потому что does not match.
C++
1
template<> char* maxn<char*>(char** arr, int n);
1
 Аватар для h_wolf
11 / 11 / 2
Регистрация: 24.01.2013
Сообщений: 212
01.10.2013, 13:23  [ТС]
Fyret, можете подробнее рассказать про синтаксис явной специализации. В книге было не очень понятно, видимо...
0
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
01.10.2013, 13:35
С синтаксисом специализации Вы разобрались. Намного запутались в типах: аргумент шаблона - тип T, тип аргумента функции - указатель на T, т.е. T*. Соответственно, когда T - это char*, то T* - это char**.

Не по теме:

В специализации шаблонной функции Вы возвращаете адрес локально выделенной памяти, это неправильно. Да и вообще, я уверен, для поиска максимального элемента в массиве достаточно найти его номер, а не заводить для этого отдельную переменную.

1
 Аватар для h_wolf
11 / 11 / 2
Регистрация: 24.01.2013
Сообщений: 212
01.10.2013, 13:37  [ТС]
Цитата Сообщение от Fyret Посмотреть сообщение
я уверен, для поиска максимального элемента в массиве достаточно найти его номер, а не заводить для этого отдельную переменную.

Я обратил на это внимание, сейчас Как раз переписываю... Спасибо за ответы!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.10.2013, 13:37
Помогаю со студенческими работами здесь

Явная специализация шаблона класса и ее методы
На 93 строке явная специализация шаблона класса под char. Но я нигде не могу найти, как мне правильно записать методы для него. Если тело...

Явная специализация шаблона для пользовательского типа
Здравствуйте! Сразу извиняюсь если вопрос покажется глупым, перечитал справочник по шаблонам, но так и не нашёл ответ. Есть шаблон класса: ...

Явная специализация шаблона функции - ошибка на этапе компиляции
Всем привет, читаю книгу С. Прата и пытаюсь скомпилировать шаблонную функцию с явной специализацией, но на этапе компиляции вылезают...

Error C2912: явная специализация не является специализацией функции-шаблона
Как исправить ошибку? #include &lt;iostream&gt; using namespace std; template &lt;typename t&gt; void PrintArray(t *arr, const int size) ...

Явное создание экземпляра класса и явная специализация шаблона класса
Всем добрый день! Не могу разобраться - эти две технологии дают один и тот же результат? В каких случаях применять одно и другое?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru