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

Delphi:所有常数都是常数,但有些比其他常量更常数?

发布时间:2020-12-15 10:17:59 所属栏目:大数据 来源:网络整理
导读:考虑: const clHotlight: TColor = $00FF9933; clLink = clHotLight; //alias of clHotlight[Error] file.pas: Constant expression expected 和替代措辞的作品: const clHotlight = TColor($00FF9933); clLink = clHotLight; //alias of clHotlight 说明
考虑:
const 
   clHotlight: TColor = $00FF9933;
   clLink = clHotLight; //alias of clHotlight

[Error] file.pas: Constant expression expected

和替代措辞的作品:

const 
   clHotlight = TColor($00FF9933);
   clLink = clHotLight; //alias of clHotlight

说明。

然后考虑:

const 
   AdministratorGUID: TGUID = '{DE44EEA0-6712-11D4-ADD4-0006295717DA}';
   SuperuserGUID = AdministratorGUID; //alias of AdministratorGUID

[Error] file.pas: Constant expression expected

并修复

编辑:在声明之前添加关键字const;有人不相信他们是const。

解决方法

clHotlight:TColor = $ 00FF9933;不是一个常数,而是一个类型常量(=静态变量),即编译器在存储器中为TColor保留一个槽位,该值将在运行时初始保持$ 00FF9933的值。
因为该值可以稍后更改(可分配Const选项为ON),所以它不是一个常量,编译器不能被clLink = clHotLight所接受;

clHotlight = TColor($ 00FF9933);与clHotlight = $ 00FF9933严格相同;
它是一个真正的常量,编译器将以代码中的值$ 00FF9933替换clHotlight。对于clLink也是如此。

阅读这个SO问题(In Delphi 7,why can I assign a value to a const?)和所有好的答案在那里…

编辑:关于TGUID …
问题是写入AdministratorGUID:TGUID ='{DE44EEA0-6712-11D4-ADD4-0006295717DA}’;不正确
它正在使用一些编译器魔术来调用场景后面的StringToGUID,从而方便地将GUID表达为一个不是大自然的字符串。他们是记录。

所以,试试AdministratorGUID ='{DE44EEA0-6712-11D4-ADD4-0006295717DA}’;不管用。那不是GUID …

解决方法是使用绝对指令使用类型化常量和变量指向同一内存区域:

const
   AdministratorGUID: TGUID = '{DE44EEA0-6712-11D4-ADD4-0006295717DA}';
var
   SuperuserGUID: TGUID absolute AdministratorGUID; //alias of AdministratorGUID
   RootGUID: TGUID absolute AdministratorGUID;      //alias of AdministratorGUID

(编辑:李大同)

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

    推荐文章
      热点阅读