Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2009, 16:21   #1
babaj
 
Регистрация: 28.06.2009
Сообщений: 4
Стрелка Функция возвращающая массив

Здравствуйте, проблема такая: как я понял в Delphi функция не может возвращать массив, то есть
Код:
function f() : array of Integer;
не прокатит, сделал
Код:
type
  ArrayOfInteger = array of Integer;

...

function f() : ArrayOfInteger;
вроде все нормально, но ругается на
Код:
var
  a : array of Integer;
begin
  a := f();
говорит что типы не совпадают, вот так все нормально
Код:
var
  a : ArrayOfInteger;
begin
  a := f();
но как-то не по Русски, может есть другие варианты?
babaj вне форума Ответить с цитированием
Старый 28.06.2009, 16:54   #2
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Код:
Function Mass(Var A: Array Of Integer): Boolean;
Begin
...
End;
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 28.06.2009, 20:57   #3
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Цитата:
Сообщение от babaj Посмотреть сообщение
но как-то не по Русски, может есть другие варианты?
А почему не по Русски? Ведь типы у Вас действиетльно не совпадают. a:ArrayOfInteger и a:array of Integer - это не одно и тоже.
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 04.07.2009, 16:28   #4
babaj
 
Регистрация: 28.06.2009
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Impuls1989 Посмотреть сообщение
А почему не по Русски? Ведь типы у Вас действиетльно не совпадают. a:ArrayOfInteger и a:array of Integer - это не одно и тоже.
ну по сути и то и другое это ссылки на целочисленные массивы.

Цитата:
Сообщение от Terran Посмотреть сообщение
Код:
Function Mass(Var A: Array Of Integer): Boolean;
Begin
...
End;
с массивом ссылок не проходит такой вариант почему-то

Код:
type
  RPRec = ^RRec;

  arrayOfRPRec = array of RPRec;

  RRec = record
  end;

  TClass = class(TObject)
    private
      FArrays : array of array of RPRec;
    public
      procedure getNextArray1(var AArray : array of RPRec);
      function getNextArray2() : arrayOfRPRec;
  end;

...

procedure TClass.getNextArray1(var AArray : array of RPRec);
begin
  AArray := self.FArrays[0]; // [Error] Incompatible types: 'Array' and 'dynamic array'
end;

function TClass.getNextArray2() : arrayOfRPRec;
begin
  result := self.FArrays[0]; // [Error] Incompatible types
end;

Последний раз редактировалось babaj; 04.07.2009 в 16:48.
babaj вне форума Ответить с цитированием
Старый 04.07.2009, 16:48   #5
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

А вот какнибудь так:

Код:
Function Proba: TBoundArray;
Var
  i : Integer;
Begin
  SetLength(Result, 11);
  For i := 0 to 10 Do Result[i] := i;
End;
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 04.07.2009, 16:53   #6
babaj
 
Регистрация: 28.06.2009
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Вавел из ГМТУ Посмотреть сообщение
А вот какнибудь так:

Код:
Function Proba: TBoundArray;
Var
  i : Integer;
Begin
  SetLength(Result, 11);
  For i := 0 to 10 Do Result[i] := i;
End;
смысл в том, что объект класса TClass должен хранить массив ссылок на массивы объектов, которые инициализируются в конструкторе, и потом их раздавать через некий метод, который я никак не могу написать
babaj вне форума Ответить с цитированием
Старый 04.07.2009, 17:06   #7
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Если объявил тип arrayofRPRec, то и использую его кругом:
Цитата:
type
RPRec = ^RRec;

arrayOfRPRec = array of RPRec;

RRec = record
end;

TClass = class(TObject)
private
FArrays : array of arrayOfRPRec;
public
procedure getNextArray1(var AArray : arrayOfRPRec);
function getNextArray2() : arrayOfRPRec;
end;


procedure TClass.getNextArray1(var AArray : arrayOfRPRec);
begin
AArray := self.FArrays[0];
end;

function TClass.getNextArray2() : arrayOfRPRec;
begin
result := self.FArrays[0];
end;
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Старый 04.07.2009, 17:16   #8
babaj
 
Регистрация: 28.06.2009
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Daramant Посмотреть сообщение
Если объявил тип arrayofRPRec, то и использую его кругом:
ну это-то понятно, я думал может можно обойтись как-нить без arrayofRPRec, просто тогда придется и в других модулях его юзать, что уменьшает универсальность модуля.
babaj вне форума Ответить с цитированием
Старый 04.07.2009, 17:40   #9
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Цитата:
что уменьшает универсальность модуля
Для того, чтобы универсальность не страдала, используй классы:
Вместо
Код:
RRec = record
end;
Код:
RRec = class
end;
RRec будет базовым классом. В дальнейшем при расширении программы, необходимо будет лишь создать наследников и доработать необходимый функционал. Остальной код останется прежним.

Цитата:
просто тогда придется и в других модулях его юзать
Для этого, описанные типы необходимо вынести в отдельный модуль, скажем MyTypes, и подключать, где требуется.

P.S. На твой выбор (в зависимости от деталей решаемой задачи): либо описать класс arrayofRPRec, либо RRec.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".

Последний раз редактировалось Daramant; 04.07.2009 в 17:42.
Daramant вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция результат которой массив Geddar Общие вопросы Delphi 13 11.04.2012 20:29
функция в delphi возвращающая код ascii заданного символа dollemika Помощь студентам 1 29.04.2009 20:03
Создание надстроек. Функция, возвращающая массив значений Jarik Microsoft Office Excel 6 13.01.2009 23:11
Функция возвращающая строку(си++). necky Помощь студентам 1 18.10.2008 18:32
API функция возвращающая имена дисков всистеме AIst Win Api 2 09.08.2008 19:17