首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于常量是否可以在程序中更改其值的有关问题

2012-02-16 
关于常量是否可以在程序中更改其值的问题。我看别人的代码里定义的常量都可以在程序里边改变它的值,而我自

关于常量是否可以在程序中更改其值的问题。
我看别人的代码里定义的常量都可以在程序里边改变它的值,而我自己试验的时候就会报[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

热点排行