加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi编译器错误E2064左侧无法分配

发布时间:2020-12-15 09:37:49 所属栏目:大数据 来源:网络整理
导读:我继承了一个Delphi应用程序,我对object pascal一无所知. 这是我需要编译到新版本的C Builder XE中的BPL. 当我运行make时,我得到错误: E2064左侧无法分配. 我已经学会了足够多的obj pascal知道我有一个试图被赋值的常量. 但是,显然,你可以克服这种行为;通过
我继承了一个Delphi应用程序,我对object pascal一无所知.

这是我需要编译到新版本的C Builder XE中的BPL.
当我运行make时,我得到错误:

E2064左侧无法分配.

我已经学会了足够多的obj pascal知道我有一个试图被赋值的常量.

但是,显然,你可以克服这种行为;通过进入Delphi编译器下的Build选项并打开“Assignable Typed constants”,实质上将常量转换为vars.

我这样做了,我继续得到同样的错误.

我尝试用{$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指令无关紧要;它控制编译器是否允许您为键入的常量赋值.您没有此代码中的任何内容.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读