Delphi:左侧无法分配给

时间:2019-03-03 23:27:48

标签: delphi

我正在将一些C代码转换为Delphi。 C代码具有读/写功能,可以将2D(x,y)索引转换为1D索引。

当我尝试在Delphi中执行相同的操作时,出现“无法分配左侧”错误。

这是我可以创建的最简单的代码来显示错误。对不起,长度。只需单击一个按钮,就可以将其完整地复制/粘贴到新表格中。

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type ClassA=class(TObject)
     private
            type DoubleArray=array of double;
            var _src:DoubleArray;
            _w,_h:integer;
     public
           constructor Create(w,h:integer);
           destructor Destroy; reintroduce;
           function at(x,y:integer):double;
end;

type ClassB=class(TObject)
     private
            type DoubleArray=array of double;
            var _d:ClassA;
            //width and height
            _w,_h:integer;
     public
           constructor Create(w,h:integer);
           destructor Destroy; reintroduce;
           procedure CauseError;
end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

constructor ClassA.Create(w,h:integer);
begin
     _w:=w;
     _h:=h;
     setlength(_src,_w*_h);
end;

destructor ClassA.Destroy;
begin
     setlength(_src,0);
end;

function ClassA.at(x,y:integer):double;
begin
     at:=_src[x+y*_w];
end;

constructor ClassB.create(w,h:integer);
begin
     _w:=w;
     _h:=h;
     _d:=ClassA.create(_w,_h);
end;

destructor ClassB.Destroy;
begin
     _d.free;
end;

procedure ClassB.CauseError;
begin
     _d.at(10,10):=_d.at(10,10)+1;
end;


procedure TForm1.Button1Click(Sender: TObject);
var CB:ClassB;
begin
     CB:=ClassB.create(100,100);

     CB.free;
end;

end.

任何人都可以帮助我使用什么语法,以便“ at”功能正常工作吗?

我在课堂上没有做很多工作,所以在这里遇到麻烦。

编译器在这一行抱怨

_d.at(10,10):=_d.at(10,10)+1;

好的,这是C代码。它具有读写版本。我如何让Delphi做到这一点?

C函数如下

     /* Read-only and read-write access to grid cells */
    double at(int x, int y) const {
        return _src[x + y*_w];
    }

    double &at(int x, int y) {
        return _src[x + y*_w];
}

0 个答案:

没有答案