Форум работает в тестовом режиме. Все данные были перенесены со старого сайта 2018 года. Некоторая информация может быть недоступна, например вложения или хайды. Просьба сообщать о данных случаях через функционал "Жалоба", прямо под постом, где отсуствуют данные из хайда или проблемы с вложением.
Могут быть проблемы в "выкидыванием" с форума (слетевшей авторизацией). Нужно собрать статистику таких случаев.
Есть Тема, куда можете сообщить о проблемах с сайтом либо просто передать привет.

Функция. Вернуть входящий массив.

wlk

Рег
8 Авг 2016
Сообщения
27
Реакции
0
var
c: array[0..2] of integer;

function f(b: array of integer): array of integer;
begin
//действия с входящим массивом

Result := b; // тут ошибка
end;

Begin
c := f(c);
End.

Получаю error: Incompatible types "DynarrayType_100052" and "OA_integer".
Вопрос для общего случая: как сделать функцию, которая принимает какой-то массив, возвращает массив. Как такое организовать?
В идеале, конечно, чтоб оно могло работать и для следующих случаев:
Код:
type
    arr: array[0..2] of integer;
var
    a: arr;
    b: array[0..2] of integer;

function f1(input_a: arr): arr;
begin
end;

function f2(input_a: array of integer): array of integer;
begin
end;

Begin

    f1(b); // case 1
    f2(a); // case 2

End.
 
Вы смешиваете динамические массивы и статические, как минимум, а это разные типы.


Код:
var
  Arr1, Arr2: array of integer;


function Func1(Arr: array of integer): array of integer;
begin
  SetLength(Result, 2);
  Result[0]:= Arr[0]*10;
  Result[1]:= Arr[1]*10;
end;


begin
  SetLength(Arr1, 2);
  SetLength(Arr2, 2);
  Arr1[0]:= 1;
  Arr1[1]:= 2;
  
  Arr2:= Func1(Arr1);
  print(Arr2[0]);
  print(Arr2[1]);
end.
Код:
type
  TIntArray = array [0..2] of integer;
  
var
  Arr1, Arr2: TIntArray;

function Func1(Arr: TIntArray): TIntArray;
begin
  Result[0]:= Arr[0]*10;
  Result[1]:= Arr[1]*10;
end;

begin
  Arr1[0]:= 1;
  Arr1[1]:= 2;
  
  Arr2:= Func1(Arr1);
  print(Arr2[0]);
  print(Arr2[1]);
end.
 
Окей попробуем через SetLength и без кастомых типов.
 
Ну я бы хотел без них обойтись. Во-первых хардкод длины. Во-вторых как объявив тип в одном файле заюзать его в другом?
 
Я хочу для себя общие функции (в том числе функции работы с массивами) вынести в отдельный юнит, и потом подключать, где надо.
 
С видимостью типов разобрался.

// TestType.pas

unit TestType;

interface

type TTest = array[0..2] of integer;

implementation
end.

Код:
// Program.pas

uses TestType;

var testVar : TTest;

begin
  testVar[0] := 2;
  testVar[1] := 3;
  print(testVar[0]);
  print(testVar[1]);
end.
UPD. С дин. массивами тоже вроде все ок стало. Помогло вынесение их в отдельный юнит, с последующим подключением где надо и SetLength.
 
Назад
Сверху