2017-02-06 4 views
1

J'ai fait un code très simple Pascal qui me reçoit cette erreur:Violation d'accès lors de l'appel d'une variable dans une classe

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

Le programme se compose de 2 modules: 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. 

Et 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. 

Si quelqu'un pouvait exp Je me demande pourquoi cela crée une violation d'accès, ce serait apprécié. Merci d'avance. :)

Répondre

1

Une classe doit toujours être instanciée (TClassType.create) avant utilisation. La seule exception à cela sont les méthodes class/static, mais vous ne les déclarez pas (et ce n'est pas un usage basique de toute façon)

+0

J'ai essayé d'ajouter un constructeur appelé "Create" et de l'utiliser pour définir la valeur de MaximiseQuestion , mais cela semble créer la même erreur que si j'avais utilisé une procédure. Est-ce que je ne comprends pas votre conseil? –

+0

Recherchez la syntaxe dans votre manuel delphi ou aidez-nous. C'est instancevariable: = tclasstype.create not instancevariable.create. –

+0

Merci! Cela semble fonctionner correctement. –