【问题标题】:Cannot construct dynamic array in dev-pascal无法在 dev-pascal 中构造动态数组
【发布时间】:2021-03-08 03:08:08
【问题描述】:

我还是一个初学者,所以如果是愚蠢的错误或什么,请原谅我。 我想编写一个程序来生成从 2 到 n 的素数,并且 n 是用户定义的。由于我在程序开始时不知道 n,所以我想在之后构造一个动态数组和 setlength(n)。这是我的代码的 sn-p:

    program D401;
    type
       arr = array of int64;
    var
       x : int64;
       a : arr;
    begin
        readln(x);
        setlength(a, x);
    end.

但它不起作用,它说: 致命:语法错误,[ 预期但 OF 发现

我也试过这个:

    program D401;
    var
       x : int64;
       a : array of int64;
    begin
        readln(x);
        setlength(a, x);
    end.

但它也会产生同样的错误。我也使用了 freepascal 和 GNU pascal,但它也不起作用。是dev-pascal的问题还是没有更新什么的?

提前致谢。

【问题讨论】:

  • 您的程序看起来有效。使用什么版本的fpc?
  • 您是否正在使用当前的 FreePascal?如果不接受此语法,您可能使用的是非常古老的 FreePascal 或其他 Pascal 方言。
  • 我可以想象 GNU Pascal 不接受这种语法。据我所知,内置动态数组只是 Delphi 和 FreePascal 的东西。
  • 我删除了 freepascal 标签。该问题询问有关 devpascal 的问题。
  • @David Dev-Pascal 只是使用 freepascal (fpc)​​ 或 gpc 编译器的 IDE,所以错误原因与编译器有关

标签: pascal


【解决方案1】:

Dev Pascal 很古老,使用不支持动态数组语法的旧编译器。简而言之,您今天不应该使用它。

如果您想要一个使用最新 Pascal 编译器的免费开发环境,最好的选择是 Lazarus,它使用现代版本的 freepascal。

【讨论】:

  • 我检查了一下,确实它似乎不支持 dyn 数组。奇怪,我以为在 1.1.x 时代就已经存在了。所以最好把它放回 2004 年并使用这个十年的一个版本
  • 谢谢马可。回到2004年?绝对是最好的选择。顺便向你问好!
  • 谢谢,你也一样 :-)
【解决方案2】:

这在现代世界并不重要。但是我正在为那些想要故意使用过时的 GNU Pascal 的人写我的答案。我对 GNU Pascal 了解一些,但建议使用基于指针的方法:

program dynarr;

type
  TElem = integer;
  TPArray = ^TElem;

var
  pArray: TPArray;
  length, i: INTEGER;

begin
  length := 10;
  GetMem(pArray, length * sizeof(TElem));

  for i := 0 to length-1 do
    (pArray+i)^:=i;
  for i := 0 to length-1 do
    writeln((pArray+i)^);

  FreeMem (pArray, length * sizeof(TElem));
  readln;
end.

使用--pointer-arithmetic 选项编译

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 2021-01-30
    相关资源
    最近更新 更多