![]() |
Eigene Klasse global deklarieren
Hallo
Ich habe eine Klasse geschrieben und sie in eine eigene Unit ausgelagert. Wenn ich jetzt in einem Programm diese Klasse nutzen will, und sie z.B. im onclick eines Button deklariere und das create aufrufe, funktioniert sie so, wie sie soll. Wenn ich sie Klasse jetzt aber global deklariere und das create ins Form1.oncreate oder in einen Button schreibe, bekomme ich eine Zugriffsverletzung. Weiss jemand, warum ich das nicht darf? |
Re: Eigene Klasse global deklarieren
Etwas Code wäre ganz praktisch, aber prinzipiell verboten ist das meines Wissens nicht.
|
Re: Eigene Klasse global deklarieren
Hallo Nikolas,
was verstehst Du unter global deklarieren? Das hier:
Delphi-Quellcode:
TEineKlasse = class(TObject)
{ Procedures and more} end; implementation var eineKlasse: TEineKlasse |
Re: Eigene Klasse global deklarieren
Ich meine das hier:
Delphi-Quellcode:
unit Unit1;
interface uses Testklasse , classes, ....; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; m: ttest; |
Re: Eigene Klasse global deklarieren
Hi Nikolas,
was macht diese Klasse denn? Wo genau kommt diese Zugriffsverletzung? Vielleicht kannst Du die Klasse ja auch mal posten. (constructor dürfte genügen) |
Re: Eigene Klasse global deklarieren
Delphi-Quellcode:
mit
unit Testklasse;
interface uses SysUtils, Dialogs, ShellApi,ShellApiEx, Windows,Forms,StdCtrls,Classes; type TTest = class(TObject) public Klammerliste: TStringlist; // hier werden die schließenden Klammern hinterlegt constructor create; // legt Klammer ab procedure PushKlammer(str: string); end; implementation constructor TTest.create; begin Klammerliste := TStringlist.create; end; procedure TTest.PushKlammer(str: string); { Dieser Funktion wird die öffnende Klammer übergeben, der schließende Ausdruck wird auf dem Stack abgelegt } var strb: string; begin strb:=str; Klammerliste.Add(strb); showmessage(Klammerliste.Text); end;
Delphi-Quellcode:
bekomme ich den Fehler mit dem Listenmaximum bei schließen den Programms nachden Pushklammer das getan hat, was es soll und mit der oben genannten Version bekomme ich eine Zugriffsverletzung sobald ich auf den Button klicke.
procedure TForm1.Button1Click(Sender: TObject);
//var //m: Ttest; begin m.Create; m.PushKlammer('('); end; |
Re: Eigene Klasse global deklarieren
Was soll denn
Delphi-Quellcode:
bewirken :gruebel:
m.Create ;
m ist doch deine Instanz der TTest Klasse. Die erstellt man so:
Delphi-Quellcode:
m := TTest.Create ;
|
Re: Eigene Klasse global deklarieren
Zitat:
Ich würds ja mal mit:
Delphi-Quellcode:
versuchen. :mrgreen:
procedure TForm1.Button1Click(Sender: TObject);
//var //m: Ttest; begin m := TTest.Create; // << m.PushKlammer('('); end; |
Re: Eigene Klasse global deklarieren
äh, Jelly, du bist doch Moderator... könntest du den Thread vielleicht unauffällig verschwinden lassen, oder als warndendes Beispiel für folgende Generationen stehenlassen?
Danke euch beiden. :thumb: insgesamt ein Fall für :wall: und :duck: Aber stopp mal. Warum funktioniert es denn dann, wenn ich m nur für den Button einführe? |
Re: Eigene Klasse global deklarieren
Zitat:
btw: Fehlt da nicht der destructor
Delphi-Quellcode:
TTest = class(TObject)
public Klammerliste: TStringlist; destructor Destroy; override; [..] destructor TTest.Destroy; begin Klammerliste.Free; inherited; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz