Frage

In Unit2 meines Programms ich den folgenden Code haben:

TValue = Record
  NewValue,
  OldValue,
  SavedValue : Double;
end; 

TData = Class(TObject)
Public
  EconomicGrowth : TValue;
  Inflation : TValue;
  Unemployment : TValue;
  CurrentAccountPosition : TValue;
  AggregateSupply : TValue;
  AggregateDemand : TValue;
  ADGovernmentSpending : TValue;
  ADConsumption : TValue;
  ADInvestment : TValue;
  ADNetExports : TValue;
  OverallTaxation : TValue;
  GovernmentSpending : TValue;
  InterestRates : TValue;
  IncomeTax : TValue;
  Benefits : TValue;
  TrainingEducationSpending : TValue;
End;

ich dann erklären Daten:. TData im Var

Wenn ich versuche, das folgende jedoch in Unit1 zu tun:

  ShowMessage(FloatToStr(Unit2.Data.Inflation.SavedValue));

ich eine EAccessViolation Meldung. Gibt es eine Möglichkeit, die Daten in ‚Daten‘ gespeichert zuzugreifen Unit1 ohne Fehler zu bekommen?

War es hilfreich?

Lösung

In Data := TData.Create; zu initialization Bereich von Unit2 oder Änderung TData auf einen Datensatz anstelle eines Objekts. Es ist nichts falsch mit Unit2 der globalen Objekte von Unit1 Zugriff, solange sie richtig initialisiert sind.

Andere Tipps

@ Hendriksen123, haben Sie die Variable Data initialisieren, bevor es zu benutzen? die EAccessViolation ist die Exception-Klasse für ungültige Speicherzugriffsfehler, und in der Regel tritt auf, wenn der Code versucht, auf ein Objekt zuzugreifen, die nicht erstellt (initialisiert) haben oder bereits zerstört worden.

versuchen Data := TData.Create; mit

und dann können Sie die Data var verwenden.

unit Unit2;

interface

type
  TValue = Record
    NewValue,
    OldValue,
    SavedValue : Double;
  end;

  TData = Class(TObject)
  Public
    EconomicGrowth : TValue;
    Inflation : TValue;
    Unemployment : TValue;
    CurrentAccountPosition : TValue;
    AggregateSupply : TValue;
    AggregateDemand : TValue;
    ADGovernmentSpending : TValue;
    ADConsumption : TValue;
    ADInvestment : TValue;
    ADNetExports : TValue;
    OverallTaxation : TValue;
    GovernmentSpending : TValue;
    InterestRates : TValue;
    IncomeTax : TValue;
    Benefits : TValue;
    TrainingEducationSpending : TValue;
  End;

procedure InitialiseData (var pData : TData);

implementation

procedure InitialiseData (var pData : TData);
begin
  pData := TData.Create;

  pData.EconomicGrowth.SavedValue := 1.00;

end;

end.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Unit2,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
  vData : TData;
begin
  Unit2.InitialiseData(vData);

  ShowMessage(FloatToStr(vData.EconomicGrowth.SavedValue));

end;

end.

Das Arbeiten

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top