специализация шаблонной функции c++

274
31 августа 2017, 20:22

Итак, задача : Реализовать шаблонные функции (массив передаётся в функцию в качестве параметра), выполняющие следующие действия:

возвращение в виде результата вновь созданного одномерного динамического массива (увеличенного размера на 2 элемента по сравнению с передаваемым массивом) и освобождение памяти из-под переданного динамического массива; массив-результат должен содержать все элементы передаваемого в функцию массива, а в конец массива-результата добавляются максимальный элемент и сумма элементов передаваемого в функцию исходного массива.

template <typename T>
T MaxElem(T *arr, int size)
{
    int indexOfMaxElem = 0;
    for (int pos = 1; pos < size; ++pos)
    {
        if (arr[pos] > arr[indexOfMaxElem])
            indexOfMaxElem = pos;
    }
    return arr[indexOfMaxElem];
}

template <typename T>
T SummOfElem(T *arr, int size)
{
    T summ = 0;
    for (int pos = 0; pos < size;++pos)
        summ += arr[pos];
    return summ;
}
template <typename T>
T *NewArr(T *arr, int size)
{
    T *newArr = new T[size + 2];
    for (int pos = 0; pos < size; ++pos)
        newArr[pos] = arr[pos];
    newArr[size] = MaxElem(arr, size);
    newArr[size + 1] = SummOfElem(arr, size);
    return newArr;
}

так же необходимо сделать специализацию шаблона для типа char*

вот код для функции для char *

int LengthOfWord(char *word)
{
    int length = 0;
    while (*word)
    {
        ++word;
        ++length;
    }
     return length;
 }
int SizeOfArrStr(char **arrOfStr, int count)
{
    int size = 0;
    for (int pos = 0; pos < count; ++pos)
    { 
        size += LengthOfWord(*arrOfStr);
        ++arrOfStr;
    }
    return size;
}
char *EquallyStr(char *resulStr, char *arrOfStr)
{
    while(*arrOfStr)
    {
        *resulStr = *arrOfStr;
        ++resulStr; ++arrOfStr;
    }
    return resulStr;
}
char *SummOfStr(char **arrOfStr, int count) 
{
    char *resultArr = new char[SizeOfArrStr(arrOfStr, count) + 1];
    resultArr[SizeOfArrStr(arrOfStr, count)] = '\0';
    char *arr = resultArr;
    for (int pos = 0; pos < count; ++pos)
    {
        EquallyStr(arr, *arrOfStr);
        arr = EquallyStr(arr, *arrOfStr);
        ++arrOfStr;
    }
    return resultArr;
}
char *SearchMinStr(char *str1, char *str2)
{
    if (LengthOfWord(str1) <= LengthOfWord(str2))
        return str1;
     return str2;
}
bool IsEqualStr(char *str1, char *str2)
{
    if (LengthOfWord(str1) != LengthOfWord(str2))
        return false;
    while (*str1)
    {
        if (*str1!=*str2)
            return false;
        ++str1; ++str2;
    }
    return true;
}
int Compare(char *str1, char *str2)
{
    while (*str1)
    {
        if (*str1 < *str2)
            return -1;
        if (*str1 > *str2)
            return 1;
        if (*str2 == 0)
            return 1;
        ++str1; ++str2; 
    }
    return -1;
}
int CompareOfStr(char *str1, char *str2) 
{
    if (IsEqualStr(str1, str2))
        return 0;
    return Compare(str1, str2);
}
char *MaxElem(char **arrOfStr, int count)
{   
    char *maxElem = *arrOfStr;
    for (int elem = 0; elem < count; ++elem)
    {
        if (CompareOfStr(maxElem, *arrOfStr) == -1)
            maxElem = *arrOfStr;
        ++arrOfStr;
    }
    return maxElem;
}
template <>
char **NewArr (char **arrOfStr, int count)
{
    char **newArr = new char *[count + 2];
    for (int pos = 0; pos < count; ++pos)
    {
        newArr[pos] = new char[LengthOfWord(arrOfStr[pos]) + 1];
        newArr[pos] = arrOfStr[pos];
    } 
    newArr[count] = MaxElem(arrOfStr, count);
    newArr[count + 1] = SummOfStr(arrOfStr, count);
    return newArr;
}

и прототип функции для char * :

template <> char **NewArr (char **arrOfStr, int count);

итак вопрос : где ошибка в реализации специализации шаблона ? вот что говорит компилятор Error 1 error LNK2001: unresolved external symbol "char * * __cdecl NewArr(char * *,int)" (??$NewArr@PAD@@YAPAPADPAPADH@Z)

READ ALSO
jquery post запрос(json ответ)

jquery post запрос(json ответ)

Доброго всем дняПри клике на ссылку, пытаюсь получить из б

311
Появление кнопки по времени видео с Youtube на Jquery

Появление кнопки по времени видео с Youtube на Jquery

Нужно сделать, чтобы на странице, где расположено видео с YoutubeКак сделать, чтобы кнопка появлялась в заданое время от не загрузки страницы...

337
bootstrap 3 datepicker, как сравнить 2 даты

bootstrap 3 datepicker, как сравнить 2 даты

Есть 2 календаря от bootstrap 3, нужно чтобы при выборе 2 дат, было выбрано не меньше 3 дней, при первом старте как вывеси получилось, а вот при изменении...

430