2017-05-03 5 views
2

Je dois inclure un code d'erreur sur l'exception.Définir ErrorCode à l'exception

Exceptions (Delphi)

type EInOutError = class(Exception) 
     ErrorCode: Integer; 
    end; 

Mais je ne sais pas comment définir le code d'erreur. Je essayé:

type ECustomError= class(Exception) 
     ErrorCode: Integer=129; 
    end; 

Mais sans succès, comment puis-je définir le code d'erreur?

+0

votre code tente d'un ssign une valeur dans sa définition. Ce n'est sûrement pas ce que vous cherchez. Vous devez l'affecter au moment où une exception est levée, est-ce correct? Si tel est le cas, implémentez un constructeur sur cette classe d'exception, et lorsque vous créerez l'exception, vous devrez passer cette variable. –

+0

voulez-vous que ce code d'erreur soit affiché ou affecté à autre chose comme le résultat d'un fonction? –

+0

@NasreddineAbdelillahGalfout Afficher uniquement. – strykerbits

Répondre

10

Vous ne pouvez pas (et ne devez pas) définir ceci dans la définition de la classe. Il n'y a pas de contexte ici où et pourquoi on l'appelle. Au lieu de cela, vous devez l'affecter en cours d'exécution, à tout endroit où cette exception peut être levée.

Cela peut être fait en dérivant votre classe de EInOutError et en ajoutant un constructeur personnalisé à elle:

type 
    ECustomError = class(EInOutError) 
    public 
    constructor Create(AMsg: String; ACode: Integer); reintroduce; 
    end; 

constructor ECustomError.Create(AMsg: String; ACode: Integer); 
begin 
    inherited Create(AMsg); 
    ErrorCode := ACode; 
end; 

Ensuite, lorsque vous soulevez l'exception, vous l'appelez comme si ...

raise ECustomError.Create('Some error message', 129); 

Vous pouvez aller un peu plus loin et ajouter ce code à votre message ...

constructor ECustomError.Create(AMsg: String; ACode: Integer); 
begin 
    inherited CreateFmt('%s (Error Code %d)', [AMsg, ACode]); 
    ErrorCode := ACode; 
end; 
+5

L'alternative est de ne pas dériver de classe personnalisée: 'var E: EInOutError; begin E: = EInOutError.Create ('un message d'erreur'); E.ErrorCode: = 129; élever E; fin; ' –