gpt4 book ai didi

Delphi编译错误E2064 左侧不能赋值给

转载 作者:行者123 更新时间:2023-12-03 15:20:32 25 4
gpt4 key购买 nike

我继承了一个 Delphi 应用程序,但我对 object pascal 一无所知。

这是一个 BPL,我需要将其编译到新版本的 C++ Builder XE 中
当我运行 make 时,出现错误:

E2064左侧无法分配。

我已经了解了足够的 obj pascal 知识,知道我有一个正在尝试分配值的常量。

但是,显然,你可以忽略这种行为;本质上是通过进入 Delphi 编译器下的“构建”选项并打开“可分配类型常量”将常量转换为变量。

我这样做了,但仍然遇到同样的错误。

我尝试用 {$J+} 和 {$J-} 包围我的代码,但它仍然无法编译。

procedure TChunkIDAT.CopyInterlacedRGB8(const Pass: Byte;
Src, Dest, Trans{$IFDEF Store16bits}, Extra{$ENDIF}: pChar );
var
Col: Integer;
begin
{Get first column and enter in loop}
Col := ColumnStart[Pass];
Dest := pChar(Longint(Dest) + Col * 3);
repeat
{Copy this row}

Byte(Dest^) := fOwner.GammaTable[pByte(Longint(Src) + 2)^]; inc(Dest);

在最后一行获取错误。如果我将 const 更改为 var,则会收到声明与之前的声明不同的错误,但我不知道之前的声明在哪里......

最佳答案

您正在将一个两字节的事物 (Char) 类型转换为一个一字节的事物 (Byte)。读取该值很容易定义,但使该值可写却很棘手,可能出于同样的原因,形式和实际“var”参数的类型需要相同。

也许您想将其类型转换为两字节的内容,例如 Word。或者您可能希望 GammaTable 成为 Char 数组,这样您就根本不需要进行类型转换。或者,如果此代码最初是为 2009 年之前的 Delphi 版本编写的,您可能希望这些 PChar 声明为 PAnsiChar — 字符类型变得更宽。另一种选择是将 Dest 类型转换为 PByte,然后取消引用结果。但这可能是一个坏主意,因为您只会覆盖缓冲区的所有其他字节。

根据函数的名称,听起来 PChar 从来都不是正确使用的数据类型。该类型适用于字符数据,但我认为这段代码正在处理字节。正确的做法可能是将 PChar 更改为 PByte,然后您根本不需要类型转换 Dest

$J 指令无关紧要;它控制编译器是否允许您为类型常量赋值。您在此代码中没有任何这些内容。

关于Delphi编译错误E2064 左侧不能赋值给,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4161404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com