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

Шаблонная функция с явной специализацией не возвращает динамический массив - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ for заменить на while http://www.cyberforum.ru/cpp-beginners/thread397831.html
for( i=0; i<(n-1);i++) { if (a==0 && a==0) zero=true; } как написать используя оператор while(условие)???
C++ Составьте пожалста блок-схему #include <iostream> #include <ctime> #include <vector> #include <algorithm> #include <iterator> int getUnique(const std::vector<int> &vec, int max) { int val; do http://www.cyberforum.ru/cpp-beginners/thread397815.html
[C++] ассемблерный модуль C++
Привет всем. Я вот тут пытаюсь ассемблерную вставку в с++ запихнуть... А не получается. Точнее получается... Но как - то криво. Пишу просто для пробы: ... void printab(int ); int x1;...
C++ Как задать динамически массивы ?
Как задать динамически массив? Какой заголовчный файл необходим? Int *B=new A n=100 Заработает ли?
C++ Как в функцыю передать массив http://www.cyberforum.ru/cpp-beginners/thread397801.html
#include "stdafx.h" #include <ctime> #include <iostream> double my(double x ) { int i,j; //Вот сюда }
C++ Все возможные перестановки букв слова - нужен алгоритм Доброго времени суток, форумчане. Помогите пожалуйста найти/составить алгоритм решения следующей задачи: Дано слово. Найти все возможные варианты перестановки его букв. Пример: Дано: abc... подробнее

Показать сообщение отдельно
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255

Шаблонная функция с явной специализацией не возвращает динамический массив - C++

03.12.2011, 14:09. Просмотров 1339. Ответов 10
Метки (Все метки)

Здравствуйте!

Возникла проблема!

Есть шаблонная функция с явной специализацией для строк (тип char*), которая должна возвратить динамический массив!

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
66
67
68
69
70
71
72
73
74
75
76
77
template <typename T> 
T *DynMass(T *mas, int n)
{
   T *dynamic = new T [n + 2]; //динамический масив
   
   for (int i = 0; i < n; i++)
   {
      dynamic[i] = mas[i]; 
   }
   dynamic[n] = maximum(mas, n); 
   dynamic[n + 1] = sum(mas, n); 
 
 
   delete [] mas;
 
   return dynamic;
}
 
template <> 
char **DynMass<char*>(char **mas, int n)
{
   char **dynamic = new char *[n]; //динамический масив
  
    for(int i = 0; i < n; i++)
    {
        dynamic[i] = mas[i];
    }
    
   delete [] *mas;
 
   return dynamic;
}
 
int main()
{
           const int k = 100; //максимальный размер динамического символьного массива
    char *ch = new char [k]; //создаем динамический массив
 
    const int nW = 15;//размер массива для фамилий 
    char **words = new char *[nW];
    
    cout << "\n\nОдномерный символьный массив(заполненный с файла CharMass.txt)" << endl << endl;
 
    ifstream inarray("CharMass.txt"); // открытие файла для ввода;
    if (!inarray) //если файла не существует
    {
        cout << "File can not be opened" << endl; //выводим сообщение
        return 0;   //выход из программы
    }
    inarray.getline(ch, k, EOF);//считываем с файла в массив, k-размер массива
    inarray.close(); //закрываем файл CharMass.txt
 
    int i = 0;
    words[i] = strtok(ch, " "); //
    while (words[i] != NULL)
    {
        i++;                                
        words[i] = strtok( NULL, " ");
    }
 
    InitMas<nW>(words); //выводим массив фамилий на екран
    
    
    words = DynMass(words, nW); //тут передаю массив в функцию
 
    /*cout << "\n\nМаксимальный элемент массива с явной специализацией для строк (тип char*);" << endl;
    cout << endl << maximum(words, nW);//вызываем функции
 
    cout << "\n\nCумма элементов массива с явной специализацией для строк (тип char*);" << endl;
    cout << endl << sum(words, nW);//вызываем функции*/
 
    
    //InitMas<nW>(words);
    cout << "\n---------------------------------------------------------------- ";
    cin.get();
    return 0;
}
Передаю массив в функцию

C++
1
words = DynMass(words, nW); //тут передаю массив в функцию
Ну дело в том что массив words почему то пустой, потому что dynamic не возвращается!!





Если сделать вывод не посредственно в функции

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template <> 
char **DynMass<char*>(char **mas, int n)
{
   char **dynamic = new char *[n]; //динамический масив
  
    for(int i = 0; i < n; i++)
    {
        dynamic[i] = mas[i];
        cout << dynamic[i] << " "; //вывод
    }
    
   delete [] *mas;
 
   return dynamic;
}
то массив dynamic выводиться в норме!

но за функцией его не видно!

Может я не правильно возвращаю его??

C++
1
return dynamic;
Спасибо!

Добавлено через 32 минуты
ну или подскажите как можно передать динамический массив char* в функцию которая создает вновь динамический и удаляем передаваемый!


Такой вариант как у меня работает с int и float!

вот этот
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template <typename T> 
T *DynMass(T *mas, int n)
{
   T *dynamic = new T [n + 2]; //динамический масив
   
   for (int i = 0; i < n; i++)
   {
      dynamic[i] = mas[i]; 
   }
   dynamic[n] = maximum(mas, n); 
   dynamic[n + 1] = sum(mas, n); 
 
 
   delete [] mas;
 
   return dynamic;
}
с char обстоят дела похуже!

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