Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Vartashezik
Сообщений: n/a
#1

Шаблоны функции - C++

24.04.2013, 15:15. Просмотров 244. Ответов 3
Метки нет (Все метки)

Делаю задание по программированию, нужна явная специализация шаблона.
Пишет ошибку:
obj\Debug\main.o||In function `main':|
C:\Users\sklad\Documents\CODEBLOCK\work8.6\main.cpp|16|undefined reference to `int maxn<int>(int*, int)'|
C:\Users\sklad\Documents\CODEBLOCK\work8.6\main.cpp|17|undefined reference to `double maxn<double>(double*, int)'|
C:\Users\sklad\Documents\CODEBLOCK\work8.6\main.cpp|18|undefined reference to `char const* maxn<char const*>(char const**, int)'|
||=== Build finished: 3 errors, 0 warnings (0 minutes, 0 seconds) ===|


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
#include <iostream>
#include <cstring>
 
using namespace std;
 
template <class T>
T maxn(T arr[],int n);
 
template <> char * maxn<char*>(char* arr[], int n);
 
int main()
{
    int numbers_i[6] = {4,3,5,6,1,8};
    double numbers_d[4] = {24.42,13.4,0,-64.6542};
    const char* numbers_pc[5] = {"goga chmo_))", "Vano orex", "Dillo deeepth", "1234567890", "Ia baklagan!" };
    cout << "Max int: " << maxn(numbers_i, 6) << endl;
    cout << "Max double: " << maxn(numbers_d, 4) << endl;
    cout << "Max length string: " << maxn(numbers_pc, 5) << endl;
 
 
 
    return 0;
}
 
template <class T>
T max5(T arr[], int n)
{
    T max_dig = arr[0];
    for (int i = 1; i < n; i++)
    {
        max_dig = max_dig > arr[i] ? max_dig : arr[i];
    }
    return max_dig;
}
 
 
template <> char * maxn<char*>(char* arr[], int n)
{
    char * pc = arr[0];
    for (int i = 1; i < n; i++)
    {
        pc = strlen(pc) > strlen(arr[i]) ? pc : arr[i];
 
    }
    return pc;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2013, 15:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблоны функции (C++):

Перевести код из функции в шаблоны функции - C++
Короче, у меня есть прога написанная с помощью функций, теперь мне нужно написать её с помощью шаблонов функции... #include...

шаблоны функции - C++
помогите решить Описать шаблон функции, меняющей местами значения двух переданных в нее параметров.

Функции-Шаблоны в С++ - C++
Как с помощью функций-шаблонов подсчитать сумму элементов, расположенных на побочной диагонали?

Функции-шаблоны - C++
Подсчитать норму матрицы по формуле А = (сумма по i ) maxai,j ( а и житое ) Вобще не понимаю как делать,а нужно уже к завтра, сделайте...

Шаблоны функции - C++
Правильно ли я оформила программу в виде шаблона функции? программа просто в виде функции #include &quot;iostream.h&quot; #include...

Шаблоны функции - C++
Реализуйте следующие задание с использованием шаблона функции. Продемонстрируйте вызов шаблона для различных типов данных. Работа с...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
24.04.2013, 18:20 #2
Vartashezik,

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
#include <iostream>
#include <cstring>
 
using namespace std;
 
template <class T>
T* maxn(T *arr,int n);
 
template <>
char** maxn<char*>(char **arr, int n);
 
int main()
{
    int numbers_i[6] = {4,3,5,6,1,8};
    double numbers_d[4] = {24.42,13.4,0,-64.6542};
    char* numbers_pc[] = {"goga chmo_))", "Vano orex", "Dillo deeepth", "1234567890", "Ia baklagan!" };
    cout << "Max int: " << *maxn(numbers_i, 6) << endl;
    cout << "Max double: " << *maxn(numbers_d, 4) << endl;
    cout << "Max length string: " << *maxn(numbers_pc, 5) << endl;
 
    return 0;
}
 
template <class T>
T* maxn(T *arr, int n)
{
    T *max_dig = arr;
    for (int i = 1; i < n; i++)
    {
        max_dig[i] = max_dig[i] > arr[i] ? max_dig[i] : arr[i];
    }
    return max_dig;
}
 
 
template <> 
char ** maxn<char*>(char** arr, int n)
{
    char ** pc = arr;
    for (int i = 1; i < n; i++)
    {
        pc[i] = pc[i] > arr[i] ? pc[i] : arr[i];
 
    }
   return static_cast<char **>(pc);
}
Vartashezik
Сообщений: n/a
24.04.2013, 20:13 #3
А зачем мне возвращать указатель и потом его разыменовывать, если можно сразу вернуть значение ?
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
24.04.2013, 21:44 #4
Vartashezik, я исправил ошибки, сделайте как вам нравится.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2013, 21:44
Привет! Вот еще темы с ответами:

Функции-шаблоны - C++
как с помощью шаблон-функций подсчитать сумму элементов, расположенных на побочной диагонали?

Шаблоны функции - C++
Очень нужно на завтра. Есть готовая программа. Нужно просто ее оформить в виде шаблонов функции( что-то такого рода: template &lt;class Func1&gt;...

Шаблоны функции | C++ - C++
Помогите оформить каждый пункт задания в виде шаблона функции. Все необходимые данные для функции должны передаваться им в качестве...

Шаблоны функции | C++ - C++
Помогите оформить каждый пункт задания в виде шаблона функции. Все необходимые данные для функции должны передаваться им в качестве...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.04.2013, 21:44
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru