全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:920
推到 Plurk!
推到 Facebook!

為何在private與protected裡宣告的變數無法被assign值?

尚未結案
aAlan
一般會員


發表:38
回覆:24
積分:12
註冊:2004-07-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-29 12:45:48 IP:211.76.xxx.xxx 未訂閱
各位大大:     煩請幫小弟一下,此問題有兩個地方標有●的標示。     程式由procedure TForm1.btnDetectClick(Sender: TObject);開始執行:     1●.檔程式轉移到父類別Sensor後執行到居然會自動跳過interval:=Interval,why ?     2●.當執行到IPAddress:=Target的時候程式就出現「Project prjSensor.exe raised exception class EAccessViolation with message 'Access violation at address 00403EC8 in module prjsensor.exe.......」為何會如此呢?    以上兩個問題,我已經debug好久了,都無法解決,還望各位大大教我..........    unit uIPSensor;    interface    uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls, uSensor, ExtCtrls;    type     TForm1 = class(TForm)     ComboBox1: TComboBox;     btnDetect: TButton;     Memo1: TMemo;     Panel1: TPanel;     procedure btnDetectClick(Sender: TObject);   private     { Private declarations }   public     { Public declarations } end;        TIPSensor = class(TSensor) //IPSensor繼承自Sensor    private       IPAddress:string;    protected       function Detect():boolean; override;       function ShellApplication(AppName:String;AMemo:TMemo):string;    public      constructor create();      procedure IPSensor(Name,Target:string;Interval:integer);   end;    var   Form1: TForm1;   IPSensor1: TIPSensor; implementation    {$R *.dfm}    constructor TIPSensor.create; begin    inherited Create;    ShowMessage('TIPSensor.Create執行'); end;    procedure TIPSensor.IPSensor(Name,Target:string;Interval:integer); begin    ●inherited sensor(Name,Target,Interval);    ●IPAddress:=Target; end;    procedure TForm1.btnDetectClick(Sender: TObject); var Sensor:array[0..2] of TSensor; begin IPSensor1.IPSensor('PingDetect',comboBox1.Text,3); Sensor[0]:=IPSensor1.create; Sensor[0].Countdown(); end; unit uSensor; interface uses Classes,Dialogs; type TSensor = Class private timer:integer; procedure StatusChangeAlert(); protected name:string; target:string; status:boolean; interval:integer; function Detect():boolean; virtual; public constructor Create(); procedure Sensor(Name,Target:string;Interval:integer); procedure Countdown(); end; implementation constructor TSensor.Create(); begin inherited Create; ShowMessage('TSensor.Create執行'); status:=False; interval:=-1; timer:=-1; end; procedure TSensor.Sensor(Name,Target:string;Interval:integer); begin name:=Name; target:=Target; interval:=Interval; end; //end procedure
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-29 14:05:24 IP:147.8.xxx.xxx 未訂閱
You need to create IPSenor1 first, e.g.    
{..skip..}
initialization
    IPSensor1 := TIPSensor.Create;
finalization
    IPSensor1.Free;
end;
similar in creating/freeing TIPSensor in your TForm1.btnDetectClick.
RogerHer
一般會員


發表:11
回覆:39
積分:10
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-29 14:17:54 IP:61.221.xxx.xxx 未訂閱
1. 試著在選單 Project-> Options-> Compiler 那一頁,把 Optimization 取消再 Compiler 一次看看 2. 看來是你根本就沒有建立 IPSensor1 的 Instance(實體),沒有配置記憶體的變數當然沒法指定值給它.....使用前請記得先呼叫物件的 create 函式.
系統時間:2024-05-20 5:32:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!