FOR 循环中的非法计数器变量 - Pascal

问题描述 投票:0回答:1

Mayby问题出在环境中[我使用replit];但是有人可以帮助我逐步理解为什么我不能那样使用计数器吗?在另一个/第二个编译器中 [dev-pascal] 结果是正确的,但是当我尝试使用析构函数时,我得到了关于语法最后一部分的信息:matrix1.free 不是一个语句。

我必须修改什么?

附言

对不起我的英语,但这不是我的母语。

{$MODE OBJFPC}
{$M+}
uses
SysUtils,crt;
const
n=10;

type
matrix = class

public
t: array [1..n,1..n] of integer;
i,x,y,sum: integer;

procedure read_data();
procedure process_data();
procedure show_data();
end;


procedure matrix.read_data();
begin
randomize();
  for x:=1 to n do
      for y:=1 to n do
        begin
          if (x=y) then
            t[x,y]:=random(10)
          else
            t[x,y]:=0;
        end;
end;

procedure matrix.process_data();
begin
sum:=0;
i:=0;
  for i:=1 to n do
    begin
      if (x=y) then
        sum:=sum+t[i,i];
    end;
end;

procedure matrix.show_data();
begin
  for x:=1 to n do
    begin
      for y:=1 to n do
        write(t[x,y],#9);
        writeln();
      end;
      writeln('suma liczb z przekątnej: ',sum);
end;

var

matrix1:matrix;
begin
  matrix1:= matrix.create;
  matrix1.read_data();
  matrix1.process_data();
  matrix1.show_data();
  matrix1.free;
end.

为什么我不能使用全局初始化?

我特别阅读

https://comp.lang.pascal.borland.narkive.com/uzQCbC7K/why-illegal-counter-variable

https://gitlab.com/freepascal.org/fpc/source/-/issues/36065

请注意,这取决于模式是一个全局变量初始化,如果您的代码运行多次,这将是不安全的。

如果您出于“始终初始化”的原因这样做,请在代码中进行初始化,因为在声明中初始化在 FPC 中是不明确的。

很明显,对于新代码,在声明时允许初始化的情况下,不支持此异常(不支持不良样式)。
FPC在这个意义上是兼容的

loops variables pascal
1个回答
0
投票

尝试向矩阵类添加构造函数和析构函数。构造函数可以初始化随机数生成器,而析构函数什么都不做,因为矩阵类不分配任何外部资源。并且调用该方法的正确方法是 Free(),free 不是一条指令,而是一个以对象引用为参数并释放分配给该对象的内存的过程。所以你需要调用 free 对象引用,而不是类名。

© www.soinside.com 2019 - 2024. All rights reserved.