为什么我在地址x发生访问冲突? [重复]

问题描述 投票:0回答:2

我是Delphi的新手。我想从另一个单元实例化一个类,但不能。

这是我的Main.pas单位:

unit Main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.RegularExpressions,
  System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Files, Records;

type
  TForm2 = class(TForm)
    Button1: TButton;
    edRoutes: TEdit;
    Memo1: TMemo;
    edFilename: TEdit;
    {...}
    lData: TLabel;
    eDate: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var
  //routes: TArray<TRoute>;
  readFile: TReadFile;
  stFilename: String;
  stText: String;
  sDate: String;
  RegExp: TRegEx;
  Match: TMatch;

begin
  stFilename := edFilename.Text;
  readFile := readFile.Create(stFilename);
  try
    readFile.LoadFile();
    stText := readFile.getText();
    Memo1.Text := stText;
    RegExp.Create('Día de entrega :    (?<date>\d{2}\.\d{2}\.\d{4})');
    if Regexp.IsMatch(stText) then
      begin
        Match := Regexp.Match(stText);
        sDate := Match.Groups['date'].Value;
        eDate.Text := sDate.Replace('.', '/');
      end;
  finally
    readFile.Free;
  end;
end;

{...}

end.

这是我的Files.pas单位:

unit Files;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, Vcl.Dialogs,
  System.RegularExpressions, System.Variants, System.Classes;

  type
    TReadFile = class(TObject)
    var
      stFilename: String;
      stText: String;
    private
    public
      constructor Create(const Filename: String);
      procedure LoadFile();
      function getDate(): String;
      function getText(): String;
    end;

  var
    readFile: TReadFile;

implementation

constructor TReadFile.Create(const Filename: String);
begin
    self.stFilename := Filename;
    self.stText := '';
end;

{...}

end.

我认为这是因为Files.pas的变量未初始化,但是我在网络上找不到任何解决方案。

Main.pas]中的[readFile := readFile.Create(stFilename);行]调用该错误。我确保stFilename不是nil,并且我知道错误是由于第二个单元(Files.pas)中的行self.stFilename := Filename;引起的。我试图重载Create方法,但是它不起作用。

我也尝试过更改可见性,但是它也不起作用。

此帖子是我最后的机会。 :/

我是Delphi的新手。我想从另一个单元实例化一个类,但是我不能。这是我的Main.pas单位:unit Main;界面使用Winapi.Windows,Winapi.Messages,System.SysUtils,System ....

delphi access instantiation
2个回答
3
投票
非常简单。在Main.pas,您必须创建TReadFile类的新实例。

3
投票
readFile := readFile.Create(stFilename);
© www.soinside.com 2019 - 2024. All rights reserved.