Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не получается вернуть массив из шаблона 
V
    Опции темы
Cerg121
Дата 31.10.2009, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 31.10.2009

Репутация: нет
Всего: нет



Читал что было на форуме не понял малость 

вот что у меня есть

Код

int Y[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

template <class A>
int *F(A p)
{
      for(i=0; i<15; i++)
   {
       for(j=16; j>0; j--)
       {
           if((int(*(p+i*8+j))%3)==0)
           {
                b=1;
   

               for(h=j+1;h<17;h++) 
               {
                   if(*(p+i*8+j)>0)
                   {
                       b=int(b*(*(p+i*8+j)));
                       Y[i]=b;
                      
                   }  
                   
               }
          break;
        
           } 

       }
    
   }

  return Y;      
 
}

void printmas (int *x)
{
         
      for (i=0;i<15;i++)

   {
       printf("\n");
       for (j=0;j<17;j++)
       {
           printf("%2.d ",*(x+i*17+j));
       }
   }
       printf("\n");


   for(i=0; i<15; i++)
   printf("%2.f",F(&u[0][0]));
} 


распечатывает нолик(((( Что не так?
PM MAIL   Вверх
Anikmar
Дата 31.10.2009, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(Cerg121 @  31.10.2009,  17:23 Найти цитируемый пост)
распечатывает нолик(((( Что не так? 

Функция printf("%2.f",F(&u[0][0])); печатает на экране результат, вохзвращенный функцией F.

Последняя в свою очередь возвращает значение return Y;

Y в свою очредь является указателем на статический массив...
При преобразовании этого указателя в тип float может выводится и нолик и единица и фиг знает что - так как это не предсказуемо.
PM MAIL ICQ   Вверх
Cerg121
Дата 1.11.2009, 07:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 31.10.2009

Репутация: нет
Всего: нет



И как мне распечатать результат?
PM MAIL   Вверх
Anikmar
Дата 1.11.2009, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(Cerg121 @  1.11.2009,  07:06 Найти цитируемый пост)
И как мне распечатать результат? 

Если под результатом вы имеете в виду массив Y - наверное как-то так:
Код

  for(i=0; i<15; i++)
   printf("%d ",Y[i]);

PM MAIL ICQ   Вверх
mrbrooks
Дата 2.11.2009, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(Cerg121 @  1.11.2009,  07:06 Найти цитируемый пост)
И как мне распечатать результат? 


или так:

Код

#include <iostream>
#include <algorithm>
#include <iterator>
    
int Y[15] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14};
std::copy(Y,Y+15,std::ostream_iterator<int>(std::cout,"\n"));
std::cin.get();



вообще использовать С-стиль в С++ программах не есть айс.

PM MAIL   Вверх
Cerg121
Дата 2.11.2009, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 31.10.2009

Репутация: нет
Всего: нет



Хех нужно показать передачу, масив и так распечатать можно.
PM MAIL   Вверх
Anikmar
Дата 2.11.2009, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(Cerg121 @  2.11.2009,  16:57 Найти цитируемый пост)
Хех нужно показать передачу, масив и так распечатать можно. 

Если вам нужна шаблонная функция, которая возвращает массив - можно сделать так:
Код

template <class A>
A *F(int Num,A InitValue)
{
    A* Temp;
    Temp = new A[Num];

    for (int i=0;i<Num;++i) Temp[i] = InitValue;

    return Temp;
}


Функция создает массив типа A размером Num и инициализирует его значением InitValue

Не забудьте удалить этот массив оператором delete[]


PM MAIL ICQ   Вверх
Cerg121
Дата 3.11.2009, 06:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 31.10.2009

Репутация: нет
Всего: нет



Я так никогда не делал, я токо 2ой месяц учу.
Покажи как его удалить правильно?
PM MAIL   Вверх
smoke_man
Дата 3.11.2009, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 9
Всего: 17



Использовать так:
Код

#include <iostream>
#include <algorithm>
#include <iterator>
#include <cstdlib>

template <class A>
A *F(int Num,A InitValue)
{
    A* Temp;
    Temp = new A[Num];

    for (int i=0;i<Num;++i) Temp[i] = InitValue;

    return Temp;
}

int main()
{

    int Num = 10;
    int *a = F<int>(Num,5);
    std::copy(a,a+Num,std::ostream_iterator<int>(std::cout,"\n"));
    std::cin.get();
    delete [] a;
    return EXIT_SUCCESS;
}



--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0863 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.