2015-10-14 148 views
-1

無法訪問的價值我有一個程序,使自行車(TObject)導致訪問衝突

當調用我的Create方法,我得到一個訪問衝突錯誤00453359和地址00000004的寫入。

constructor MyBike.Create(iPrice, iStroke, iYear, iCC: Integer; sName, 
    sModel: string); 
begin 
    fCC := iCC; // <- Here is the error 
    fPrice := iPrice; 
    fStroke := iStroke; 
    fYear := iYear; 
    fName := sName; 
    fModel := sModel; 

當我看那條線時,它說它是一個inaccessible value,就像那裏的所有變量一樣。

這裏是我班上的其他同學:

type 
    MyBike = class(TObject) 
    private 
    fCC, fStroke, fYear, fPrice: Integer; //I will at a later stage use fPrice as a currency 
    fName, fModel: string; 
    public 
    constructor Create(iPrice, iStroke, iYear, iCC: Integer; sName, sModel: 
     string); 
    function GetValues: string; 
    end; 

implementation 

{ MyBike } 

constructor MyBike.Create(iPrice, iStroke, iYear, iCC: Integer; sName, 
    sModel: string); 
begin 
    fCC := iCC; 
    fPrice := iPrice; 
    fStroke := iStroke; 
    fYear := iYear; 
    fName := sName; 
    fModel := sModel; 
end; 

和我的主要單元:

private 
    { Private declarations } 
    NewBike : MyBike; 
    public 
    { Public declarations }  
    end; 

var 
    Form1: TForm1; 
    redtSavedObject: TRichEdit; 
    btnClearSavedObject: TButton; 

implementation 

{$R *.dfm} 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    btnSaveToText.Enabled := False; 
    btnSavetodata.Enabled := False; 
end; 

procedure TForm1.btnSaveasObjectClick(Sender: TObject); 
var 
    Price, Year, CC, Stroke : Integer; 
    Name, Model : String; 

begin 
    Price := StrToInt(edtPrice.Text); //All of these values are fine 
    Year := StrToInt(edtYear.Text); 
    CC := StrToInt(edtCC.Text); 
    Stroke := StrToInt(edtStroke.Text); 
    Name := edtName.Text; 
    Model := edtModel.Text; 

    NewBike.Create(Price, Stroke, Year, CC, Name, Model); 

我看了這篇文章:Delphi strange inaccessible value (acess violation) o.O並說我必須編輯這個項目設置:

調試信息:ON

局部符號:ON

優化:關。

我做了重建,仍然沒有變化。香港專業教育學院作爲走得更遠,重新啓動我的電腦無濟於事

+0

你在哪個行/變量上得到了錯誤 – ankur140290

+0

'fCC:= iCC'在類的構造方法中 –

回答

3

變化

NewBike.Create(Price, Stroke, Year, CC, Name, Model); 

NewBike := MyBike.Create(Price, Stroke, Year, CC, Name, Model); 

那到鬃毛類的新實例的正確方法。

當你創建一個類的新實例調用然後在類(MyBike)構造函數併爲其分配的retun值的變量NewBike := MyBike.Create( ...);`

每個對象的內部類的(例如)您有一個隱藏參數Self有關Delphi Basics的更多信息。你的情況的問題是你沒有創建一個新的類的實例,因此你的自變量是

+1

這就是對,謝謝:) –

+0

你是歡迎@AidanQuinn。請關閉該問題。 –