Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
1 / 1 / 1
Регистрация: 25.10.2015
Сообщений: 25

Специализация функции

13.02.2017, 00:58. Показов 750. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добра всем!
НЕ могу понять в чем ошибка:
||=== Build: Debug in test (compiler: GNU GCC Compiler) ===|
E:\Dropbox\CPP\day 14\test\main.cpp|17|error: template-id 'MaxPart<>' for 'char MaxPart(char**, int)' does not match any template declaration|
ЗАдача:
Write a template function maxn() that takes as its arguments an array of items of
type T and an integer representing the number of elements in the array and that
returns the largest item in the array.Test it in a program that uses the function template
with an array of six int value and an array of four double values.The program
should also include a specialization that takes an array of pointers-to-char as
an argument and the number of pointers as a second argument and that returns the
address of the longest string. If multiple strings are tied for having the longest
length, the function should return the address of the first one tied for longest.Test
the specialization with an array of five string pointers.


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
#include<iostream>
#include <cstring>
using namespace std;
const int MaxItem=5;
template <class A>
A MaxPart( A sample[MaxItem],int MaxItem)
{
    int maxPos=0;
    for(int next=1;next<MaxItem;next++)
        {
            if (sample[maxPos]<sample[next])
            maxPos=next;
        }
return sample[maxPos];
};
template <>
char MaxPart( char *sample[MaxItem],int MaxItem)
{
    int maxPos=0;
    for(int next=1;next<MaxItem;next++)
        {
            if (sample[maxPos]<sample[next])
            if (strlen(sample[maxPos])<strlen(sample[next]))
            maxPos=next;
        }
return sample[maxPos];
};
 
 
int main()
{
    int arrSize=10;
float theFloat[MaxItem]={1,20.5,3.9,4.1,5};
int theInt[MaxItem]={6,2,9,6,2};
char *Temp[arrSize]={
                "Stas",
                "Katja",
                "Vera",
                "Anton",
                "Mama",
                "PApa",
                "Flolik",
                "Zajats",
                "Manchester",
                "United"
};
cout<<"Float to function Max Findind: "<<MaxPart(theFloat,MaxItem)<<endl
    <<"Int to find Max array member: "<<MaxPart(theInt,MaxItem)<<endl
    <<"String to find Max array member: "<<MaxPart(Temp,arrSize)<<endl;
return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.02.2017, 00:58
Ответы с готовыми решениями:

Специализация шаблона функции
Как сделать специализированную функцию шаблон на тип int? У меня что-то не получается ..

Специализация шаблона функции
Допустим у нас имеется шаблон функции такой, в угловых скобках которого содержатся как типовые параметры (с ударением на букве И), так и...

Частичная специализация шаблона функции
Добрый день, помогите разобраться в чем проблема кода: template &lt;int X, int Y&gt; bool isSimple(){ return X%Y == 0 &amp;&amp;...

6
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
13.02.2017, 01:18
Modbus,
C++
1
2
template <>
char* MaxPart<char*>(char *sample[MaxItem], int MaxItem)
Но вы, похоже не понимаете как массивы передаются в функию.
1
1 / 1 / 1
Регистрация: 25.10.2015
Сообщений: 25
13.02.2017, 12:24  [ТС]
Это из-за того, что я попробовал преобразовать char* в char? Или быть может из-за странного описания аргументов, которыми являются массивы?

Добавлено через 4 минуты
кстати, ничего не изменилось, хотя указанные вами ошибки были бы выявлены компилятором позже.

Добавлено через 10 часов 29 минут
Господа, помогите плз!

Добавлено через 32 секунды
помогите плз
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
13.02.2017, 12:55
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
#include <cstring>
#include <iostream>
 
template <typename T, size_t N>
T maxn(const T (&A)[N])
{
    size_t iMax = 0;
    for (size_t i = 1; i < N; i++)
        if (A[iMax] < A[i])
            iMax = i;
    return A[iMax];
}
 
template<size_t N>
const char* maxn(const char*(&A)[N])
{
    size_t iMax = 0;
    for (size_t i = 1; i < N; i++)
        if (strlen(A[iMax]) < strlen(A[i]))
            iMax = i;
    return A[iMax];
}
 
int main()
{
    int A[6] = {1, 2, 6, 3, 4, 5};
    double B[4] = {1.1, 2.2, 3.3, 4.4};
    const char *C[] = {"apple", "orange", "banana"};
    std::cout << maxn(A) << std::endl << maxn(B) << std::endl << maxn(C) << std::endl;;
}
0
1 / 1 / 1
Регистрация: 25.10.2015
Сообщений: 25
13.02.2017, 18:37  [ТС]
вы не можете обьяснить эту запись (const T (&A)[N])?

Добавлено через 1 минуту
и еще, шаблоны, я так понял должны иметь одинаковое тело? это и есть причина ошибки выше?
0
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
13.02.2017, 20:02
Цитата Сообщение от Modbus Посмотреть сообщение
вы не можете объяснить эту запись (const T (&A)[N])?
(&A)[N]- здесь передает массив по ссылке, const T- используем шаблоны что бы не писать под каждый тип свою функцию так уменьшим код
0
1 / 1 / 1
Регистрация: 25.10.2015
Сообщений: 25
13.02.2017, 23:49  [ТС]
эта статья просто меня убила. действительно, я не знаю как передается массив. я всегда передавал как ссылку на первый элемент массива, не важно , скоько измерений.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.02.2017, 23:49
Помогаю со студенческими работами здесь

Не вызывается специализация шаблонной функции
Читаю книгу Прата, C++ Primer Plus. В ней есть следующее упражнение. Необходимо написать шаблонную функцию maxn(), которая принимает в...

Полная специализация члена функции
Как специализировать функцию член класса? У меня не работает. #include &lt;iostream&gt; struct A { template &lt;typename T&gt; void...

Явная специализация функции для структуры
#include &lt;iostream&gt; using namespace std; struct box { char maker; float height; float width; float length;...

Почему не создается специализация шаблона функции
Почему это не работает и как правильно определить operator&lt;&lt; вне тела класса? #include &lt;iostream&gt; using namespace std; ...

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru