Что творится? Не компилируется?
А не компилируется из-за непонимания концепции эквивалентности типов. В отличие от Си, внешне одинаковые типы не эквивалентны! Для эквивалентности надо, чтобы их цепочки
type A = B;
вели к одному «предку». Для этого существует оператор
type
.
const
FieldSize = 10;
MaxShips = 10;
type
TField = record
cells : array [1..FieldSize, 1..FieldSize] of integer;
nLive : array [1..MaxShips] of integer;
end;
TGame = class
Field : TField;
constructor Create(const Field : TField);
end;
Возможно, эквивалентность ослабили в Delphi, не проверял. А в BP именно так.
Возможно, вы также сделали известную ошибку начинающего дельфиста:
var
x : Test;
....
x.Create(a, b); // неверно!
x := Test.Create(a, b); // верно!
Есть одно исключение из этой эквивалентности типов.
type
DaInt = array of integer;
procedure DoSomething1(var x : array of integer);
procedure DoSomething2(var x : DaInt);
Эти команды обе действуют, но не эквивалентны!
Первое — нововведение TP7, параметр типа «открытый массив», массив любой размерности. Статический, динамический, строчка 2D-массива — всё подойдёт. Действуют Low, High и (для D4+) Length.
Второе — нововведение D4, динамический массив, которому можно изменять длину через SetLength.