关于常量是否可以在程序中更改其值的问题。
我看别人的代码里定义的常量都可以在程序里边改变它的值,而我自己试验的时候就会报[Error] Unit1.pas(30): Left side cannot be assigned to这样的错误。我声明的常量是这个样子的:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
i:integer=0;
t=1;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
i:=t;//出错
i:=1;//出错
end;
end.
执行Button1Click的时候就会报上面那个错误。但别人用就不会,把别人代码弄出来:
const
AVICompressIdx:integer=1;
CloseTick:integer=600; // 自动关闭窗口秒计数
CM_AlarmPrompt =WM_USER+1; // 自定义告警提示消息
ZoneName:string= '.zzpat.com ';
HTYYTS:integer=3; // 后台语音提示次数
vPlaySound:boolean=false; // 后台声音提示播放标识
vPlayFile:shortstring= ' '; // 后台声音播放文件名
CurrentPlayNum:integer=0; // 后台声音已播放次数
AppFlag:integer=0; //程序退出时是否保存INI(默认为保存)
TabUser:integer=0; //判断button7是用来登陆还是用来注销用户(默认为登陆)
procedure TCenter114Form.Button7Click(Sender: TObject);
var UserLogForm:TUserLogForm;
begin
UserLogForm:=TUserLogForm.Create(self);
with UserLogForm do
begin
if ShowModal=1 then
begin
AdminData.Username:=UserLogForm.Edit1.Text;
AdminData.Password:=UserLogForm.Edit2.Text;
AdminData.TCVSRunFlag:=0;
AdminData.CmdType:=2;
if TabUser=0 then // 用户登录
begin
Alarm114Log.StartTime:=now; //获取话务员上线时间
StatusBar1.Panels[1].Text:= '空闲 ';
try
IdUDPServer1.SendBuffer(ManagerIPEdit.Text,9900,AdminData,sizeof(AdminData));
except
end;
AdminData.CmdType:=1;
TabUser:=1; //就是这里,这个常量就没有报错。
end
else if TabUser=1 then //用户注销
begin
Alarm114Log.StartTime:=Now; //获取下一个话务员的上线时间
end;
end
else if TabUser=0 then
begin
AppFlag:=1;
Application.Terminate;
end
end;
UserLogForm.Destroy;
end;
==========================
请给个合理的解释啊。。多谢
[解决办法]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
MCForms, ShellApi, StdCtrls, Grids, DBGridEh, DBGrids;
const
TabUser: Integer = 0;
type
TForm1 = class(TForm)
DBGridEh1: TDBGridEh;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ 私有成员(变量、函数)声明 }
public
{ 公共成员(变量、函数)声明 }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
TabUser := 1;
ShowMessage(IntToStr(TabUser));
end;
end.
没报错!
[解决办法]
这在delphi的联机帮助里有解释,以前的dephi是允许更改常量的值得,现在不推荐这样做。可以打开编译开关{$J+}允许更改常量。
[解决办法]
Project---> Options--> Compiler---> Assignable Typed Constants
[解决办法]
在单元文件开头加上就可以:
unit Unit1;
{$J+}
interface