Доброго времени суток, господа!
Есть вопрос. Имеется тип Диапазон. Имеется функция, которая возвращает указатель на массив из Диапазон'ов.
Так вот, при компиляции возникает ошибка, поскольку в RETURN происходит недопустимое присваивание.
Код:
TYPE
Diapason* = ARRAY 2 OF REAL;
PROCEDURE Need* (age: INTEGER): POINTER TO ARRAY 2 OF Diapason;
VAR
ret: POINTER TO ARRAY 2 OF Diapason;
BEGIN
NEW(ret);
ret[0][0] := 1;
..............
..............
..............
RETURN ret;
END Need;
В документации прописано:
Цитата:
Совместимость по присваиванию [Assignment compatible]
Выражение e типа Te является совместимым по присваиванию с переменной v типа Tv, если выполняется одно из следующих условий:
1. Te и Tv эквивалентны и не являются ни типами открытых массивов, ни типами записей, описанными с атрибутами ABSTRACT, EXTENSIBLE или LIMITED;
2. Te и Tv — числовые или литерные типы, и Tv включает Te;
3. Te и Tv — указательные типы, и Te — потомок типа Tv;
4. Tv — указательный или процедурный тип, и e есть NIL;
5. Tv — числовой тип, а e — константное выражение, чье значение содержится в Tv;
6. Tv — массив CHAR, Te — String или Shortstring, и LEN(e) < LEN(v);
7. Tv — массив SHORTCHAR, Te — Shortstring, и LEN(e) < LEN(v);
8.??Tv — процедурный тип, а e — имя процедуры, чьи формальные параметры соответствуют параметрам Tv.
Получается, что ret должен быть потомком Diapason? Тогда надо создавать запись и наследовать от нее?[/i]