2015-10-14 115 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。请关闭该问题。 –