![]() |
Delphi-Version: XE2
Type im einer Klasse -> public erlaubt?
Delphi-Quellcode:
Einen wunder schönen Guten Morgen,
type
Twoerterzaehlen = class(Tobject) private procedure setFwort(const Value: String); procedure setFAnzahl(const Value: integer); protected fWort: string; fAnzahl: integer; public type arroftwoerter = array of Twoerterzaehlen;// möchte ich ich in anderen uniten verwenden constructor create(Anz: integer; Wor: String); overload; constructor create(Wor: String); overload; property Wort: String read fWort write setFwort; property Anzahl: integer read fAnzahl write setFAnzahl; function woerter_zaehlen(st_woerter: tstringlist): arroftwoerter; function toString(a_array: arroftwoerter): String; end; der oben liegende Quellcode ist mein momentanes ergebniss von Aufgabe; Ich arbeite über mehere Units und muss auf die hervorbehobene Zeile drauf zugreifen. Deswegen ist Sie im Public. In der nächsten Unit hab ich nun use woerter ( name der oben abgebildete Unit) aber er sagt mir dann, [FEHLER] [DCC Fehler] sortieren.pas(12): E2003 Undeklarierter Bezeichner: 'arroftwoerter' [/Fehler];
Delphi-Quellcode:
unit sortieren;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, woerter; Type sort = class function sortieren(d_array: arroftwoerter): arroftwoerter;// FEHLER Zeile; end; implementation Tut mir leid, für die warscheinlich doofe Frage; aber Delphi ist totales Neuland für mich .... dank im vorraus :) |
AW: Type im einer Klasse -> public erlaubt?
Deklariere ihn im Interface der Unit, vor der Klasse
Delphi-Quellcode:
type
Twoerterzaehlen = class; //forward Deklaration arroftwoerter = array of Twoerterzaehlen;// möchte ich ich in anderen uniten verwenden Twoerterzaehlen = class(Tobject) private procedure setFwort(const Value: String); procedure setFAnzahl(const Value: integer); protected fWort: string; fAnzahl: integer; constructor create(Anz: integer; Wor: String); overload; constructor create(Wor: String); overload; property Wort: String read fWort write setFwort; property Anzahl: integer read fAnzahl write setFAnzahl; function woerter_zaehlen(st_woerter: tstringlist): arroftwoerter; function toString(a_array: arroftwoerter): String; end; |
AW: Type im einer Klasse -> public erlaubt?
Nested Types gehören ja zu der Klasse, in der sie deklariert sind. Also muss es wohl lauten:
Delphi-Quellcode:
Oder Du machst es Dir einfach und machst einen "normalen" Typ daraus wie Markus gezeigt hat.
function sortieren(d_array: Twoerterzaehlen.arroftwoerter): Twoerterzaehlen.arroftwoerter;
//Dummy-Zeile für den DP-Highlighter |
AW: Type im einer Klasse -> public erlaubt?
Das es sich um einen Nested Type handelt, musst du ihn außerhalb der Klasse voll qualifizieren:
Delphi-Quellcode:
function sortieren(d_array: Twoerterzaehlen.arroftwoerter): Twoerterzaehlen.arroftwoerter;
|
AW: Type im einer Klasse -> public erlaubt?
Das ich diese vollständig weiter geben muss, war mir nicht bekannt.
Dank euch. |
AW: Type im einer Klasse -> public erlaubt?
Zitat:
Also zumindesntens bis XE geht es auch ohne einen vollqualifizierten Typbezeichner. irgendwann danach wurden dann (zumindestens weiß ich es von ENUMs) im Compiler eine Option eingebaut, bzw. standardmäßig aktiviert, welche die Angabe des Namespace (vollqualifizierten Typbezeichners) verlangt, welches man aber auch wieder deaktivieren kann. |
AW: Type im einer Klasse -> public erlaubt?
Aber könnte durch das Deaktivieren nicht auch die Eindeutigkeit verloren gehen;
und somit eine verwechslung vorkommen? Ich persönlich finde schon, dass es nützlich ist eine eindeutige qualifizieren "auszusprechen" |
AW: Type im einer Klasse -> public erlaubt?
Man kann es praktisch für jeden Typen einzeln angeben.
Nja, also wo es wirklich absolut unleserlich wird, ist da, wo z.B. mehrere/viele ENUMs als SET angegeben werden müssen und man da nicht viel als Bereich (..) zusammenfassen kann. WITH mit Typen gibt es doch bestimmt noch nicht und wer kommt schon auf die Idee sich dafür einen lokalen Typen/Alias mit "kurzem" Bezeichner anzulegen und am Besten einbuchstabig? Selbst wenn es dektiviert wurde, dann kann man immernoch per NameSpace zugreifen, wenn es nicht eindeutig ist. Außerdem prüft ja der Compiler die Typkompatibilität, womit man sowieso keinen falschen Wert verwenden kann. Praktisch ist das vorallem dadurch, daß man bei den Werten den Prefix weglassen kann.
Delphi-Quellcode:
Wobei "kann" besser "sollte" heißen sollte, denn Namespace und Prefix zusammen sind ja ein bissl sinnlos.
type
TEnumeration = (Onw, Two, Tree); |
AW: Type im einer Klasse -> public erlaubt?
Zitat:
doppelt hält besser ;-) irgendwer muss immer drunter leiden... arme performance :p |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:09 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