我正在将一些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];
}