AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene Klasse global deklarieren

Ein Thema von Nikolas · begonnen am 18. Mai 2007 · letzter Beitrag vom 18. Mai 2007
Antwort Antwort
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#1

Eigene Klasse global deklarieren

  Alt 18. Mai 2007, 15:09
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?
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Eigene Klasse global deklarieren

  Alt 18. Mai 2007, 15:15
Etwas Code wäre ganz praktisch, aber prinzipiell verboten ist das meines Wissens nicht.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Eigene Klasse global deklarieren

  Alt 18. Mai 2007, 15:22
Hallo Nikolas,

was verstehst Du unter global deklarieren? Das hier:

Delphi-Quellcode:
TEineKlasse = class(TObject)
{ Procedures and more}
end;

implementation

var
  eineKlasse: TEineKlasse
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Eigene Klasse global deklarieren

  Alt 18. Mai 2007, 15:39
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;
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Eigene Klasse global deklarieren

  Alt 18. Mai 2007, 15:40
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)
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Eigene Klasse global deklarieren

  Alt 18. Mai 2007, 15:48
Delphi-Quellcode:
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;
mit
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
//var
//m: Ttest;
begin
m.Create;
m.PushKlammer('(');
end;
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.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Eigene Klasse global deklarieren

  Alt 18. Mai 2007, 15:52
Was soll denn
m.Create ; bewirken

m ist doch deine Instanz der TTest Klasse. Die erstellt man so:

m := TTest.Create ;
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Eigene Klasse global deklarieren

  Alt 18. Mai 2007, 15:53
Zitat von Nikolas:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
//var
//m: Ttest;
begin
m.Create;
m.PushKlammer('(');
end;


Ich würds ja mal mit:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
//var
//m: Ttest;
begin
m := TTest.Create; // <<
m.PushKlammer('(');
end;
versuchen.
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#9

Re: Eigene Klasse global deklarieren

  Alt 18. Mai 2007, 15:57
ä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.

insgesamt ein Fall für und

Aber stopp mal. Warum funktioniert es denn dann, wenn ich m nur für den Button einführe?
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Gremlin

Registriert seit: 18. Apr 2006
Ort: Im Süden
177 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Eigene Klasse global deklarieren

  Alt 18. Mai 2007, 20:43
Zitat von Nikolas:
Aber stopp mal. Warum funktioniert es denn dann, wenn ich m nur für den Button einführe?
Wie meinst du das mit dem einführen?

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;
Gruss Gremlin
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz