2017-02-06 2 views
1

ich einige sehr einfachen Code in Pascal vorgenommen haben, die mir diesen Fehler bekommen:Pascal Zugriffsverletzung, wenn eine Variable in einer Klasse aufrufen

Project BugFixing.exe raised exception class EAccessViolation with message 'Access violation at address 0040F1EE in module 'BugFixing.exe'. Write of address 00000004'.

Das Programm besteht aus zwei Modulen: BugFixing.dpr:

program BugFixing; 

{$APPTYPE CONSOLE} 

uses 
    SysUtils, uLinearProgrammingMainLogic in 'uLinearProgrammingMainLogic.pas', math; 

var 
MinOrMax : integer ; 
Question : TQuestion ; 

begin 
    try 
    Randomize ; 
    MinOrMax := RandomRange(0,2) ; 
    Question.SetMaximiseQuestion(MinOrMax); 

    except 
    on E: Exception do 
     Writeln(E.ClassName, ': ', E.Message); 
    end; 
end. 

Und uLinearProgrammingMainLogic.pas:

unit uLinearProgrammingMainLogic; 

interface 

uses sysUtils, math ; 

type 

TQuestion = class 
    private 
    MaximiseQuestion : boolean ; 
    public 
    procedure SetMaximiseQuestion (MinOrMax : integer) ; 
end; 

implementation 

procedure TQuestion.SetMaximiseQuestion(MinOrMax : integer); 
begin 
    if MinOrMax = 0 then 
    MaximiseQuestion := true 
    else 
    MaximiseQuestion := false ; 
end; 

end. 

Wenn jemand exp könnte lag mir, warum dies eine Zugriffsverletzung erstellt, würde das geschätzt werden. Danke im Voraus. :)

Antwort

1

Eine Klasse muss vor der Verwendung immer instanziiert werden (TClassType.create). Die einzige Ausnahme sind Klassen/statische Methoden, aber Sie deklarieren sie nicht so (und das ist sowieso keine Grundbedienung)

+0

Ich habe versucht, einen Konstruktor namens "Create" hinzuzufügen und damit den Wert von MaximiseQuestion zu setzen , aber das scheint den gleichen Fehler zu erzeugen, als ob ich eine Prozedur verwendet hätte. Mißverstehe ich deinen Rat? –

+0

Suchen Sie die Syntax in Ihrem Delphi-Handbuch oder in der Hilfe. Es ist instancevariable: = tclasstype.create nicht instancevariable.create. –

+0

Danke! Dies scheint gut zu funktionieren. –

Verwandte Themen