OberonCore
https://forum.oberoncore.ru/

присвоение указателей: unknown array length
https://forum.oberoncore.ru/viewtopic.php?f=29&t=2335
Страница 1 из 1

Автор:  sacred [ Среда, 10 Февраль, 2010 11:27 ]
Заголовок сообщения:  присвоение указателей: unknown array length

Код:
TYPE
   StringList = POINTER TO ARRAY OF POINTER TO ARRAY OF CHAR;

VAR
   List : StringList;

PROCEDURE ParseParameters(Line : ARRAY OF CHAR):StringList;
VAR
   res : StringList;
BEGIN
   NEW(res, 10);
   RETURN res
END ParseParameters;

BEGIN
   CmdLn := WinApi.GetCommandLineW();
   List := ParseParameters(CmdLn);
END UsiProcessMessage.

Код упрощён, схематичен, для акцента на проблеме.

На последней строчке ругается: "unknown array length". Непонятно в чём проблема. Я присваиваю не массивы, а указатели на массивы. В чём я здесь ошибаюсь?

Автор:  Роман М. [ Среда, 10 Февраль, 2010 11:43 ]
Заголовок сообщения:  Re: присвоение указателей: unknown array length

Win/Docu/WinApi.odc
Цитата:
Pointers to Pointers

Pointers to pointers or basic types cannot be declared directly in Component Pascal. A type of the form
p: POINTER TO ARRAY [untagged] OF BaseType;
is used instead. You can use the form p[0] to dereference such a pointer.

Автор:  Евгений Темиргалеев [ Среда, 10 Февраль, 2010 11:44 ]
Заголовок сообщения:  Re: присвоение указателей: unknown array length

Проблема не в присвоении указателей, а в присвоении открытому массиву Line : ARRAY OF CHAR.

PROCEDURE GetCommandLineW* (): PtrWSTR;
PtrWSTR* = POINTER TO ARRAY [untagged] OF CHAR;

Длина массива, на кот. указывает CmdLn не известна. Пишите CmdLn$, чтобы присваивал String

Автор:  sacred [ Среда, 10 Февраль, 2010 12:17 ]
Заголовок сообщения:  Re: присвоение указателей: unknown array length

Роман М. писал(а):
Win/Docu/WinApi.odc
Цитата:
Pointers to Pointers

Pointers to pointers or basic types cannot be declared directly in Component Pascal. A type of the form
p: POINTER TO ARRAY [untagged] OF BaseType;
is used instead. You can use the form p[0] to dereference such a pointer.

В документации, действительно есть такая фраза. А вот что она означает? Я спокойно использую pointers to pointers в модулях без каких-либо проблем.
По сабжу правильный совет дал Евгений Термингалиев, спасибо ему!
А вот по поводу этой цитаты из документации хочется разобраться, что же здесь имеется в виду?

Автор:  Роман М. [ Среда, 10 Февраль, 2010 12:40 ]
Заголовок сообщения:  Re: присвоение указателей: unknown array length

sacred писал(а):
В документации, действительно есть такая фраза. А вот что она означает? Я спокойно использую pointers to pointers в модулях без каких-либо проблем.
По сабжу правильный совет дал Евгений Термингалиев, спасибо ему!
А вот по поводу этой цитаты из документации хочется разобраться, что же здесь имеется в виду?

Например, такой тип нельзя объявить:
T = POINTER TO POINTER
А каким образом у тебя используется "pointers to pointers"?

Автор:  Евгений Темиргалеев [ Среда, 10 Февраль, 2010 12:43 ]
Заголовок сообщения:  Re: присвоение указателей: unknown array length

Language Report писал(а):
6.4 Pointer Types

Variables of a pointer type P assume as values pointers to variables of some type T. T is called the pointer base type of P and must be a record or array type.
sacred писал(а):
В документации, действительно есть такая фраза. А вот что она означает?
Документация WinApi. Речь идёт про аналоги сишным указателям на любой тип, которые, в частности, используются для параметров-ссылок. В КП указатель на ARRAY [untagged] суть тоже самое.

P.S. "Термингалиев" -- спасибо за минуту смеха :lol: до этого максимум был три ошибки :)

Автор:  sacred [ Среда, 10 Февраль, 2010 13:11 ]
Заголовок сообщения:  Re: присвоение указателей: unknown array length

Евгений Темиргалеев писал(а):
P.S. "Термингалиев" -- спасибо за минуту смеха :lol: до этого максимум был три ошибки :)

:) Да уж, простите, великодушно!

А по поводу указателей на указатели, я был немного сбит с толку первой цитатой из документации, так как решил, что она как-то связана с моим вопросом, и решил, что указатели на массив указателей - тоже вне закона.
Действительно, указатели на указатели я нигде не использую, да и, честно говоря, не представляю, для чего бы это могло понадобиться.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/