AGB  ·  Datenschutz  ·  Impressum  







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

Type im einer Klasse -> public erlaubt?

Ein Thema von Mokus · begonnen am 1. Okt 2013 · letzter Beitrag vom 2. Okt 2013
Antwort Antwort
Benutzerbild von Mokus
Mokus

Registriert seit: 24. Sep 2013
165 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Type im einer Klasse -> public erlaubt?

  Alt 1. Okt 2013, 09:04
Delphi-Version: XE2
Delphi-Quellcode:
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;
Einen wunder schönen Guten Morgen,

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
Markus
es gibt nur 10 arten von menschen !
die die binär verstehen und die die nicht. !
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Type im einer Klasse -> public erlaubt?

  Alt 1. Okt 2013, 09:08
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;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#3

AW: Type im einer Klasse -> public erlaubt?

  Alt 1. Okt 2013, 09:11
Nested Types gehören ja zu der Klasse, in der sie deklariert sind. Also muss es wohl lauten:
Delphi-Quellcode:
function sortieren(d_array: Twoerterzaehlen.arroftwoerter): Twoerterzaehlen.arroftwoerter;
//Dummy-Zeile für den DP-Highlighter
Oder Du machst es Dir einfach und machst einen "normalen" Typ daraus wie Markus gezeigt hat.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#4

AW: Type im einer Klasse -> public erlaubt?

  Alt 1. Okt 2013, 09:12
Das es sich um einen Nested Type handelt, musst du ihn außerhalb der Klasse voll qualifizieren:

    function sortieren(d_array: Twoerterzaehlen.arroftwoerter): Twoerterzaehlen.arroftwoerter;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Mokus
Mokus

Registriert seit: 24. Sep 2013
165 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Type im einer Klasse -> public erlaubt?

  Alt 1. Okt 2013, 09:17
Das ich diese vollständig weiter geben muss, war mir nicht bekannt.

Dank euch.
Markus
es gibt nur 10 arten von menschen !
die die binär verstehen und die die nicht. !
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Type im einer Klasse -> public erlaubt?

  Alt 1. Okt 2013, 12:14
Das es sich um einen Nested Type handelt, musst du ihn außerhalb der Klasse voll qualifizieren:
Jain.

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.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Mokus
Mokus

Registriert seit: 24. Sep 2013
165 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Type im einer Klasse -> public erlaubt?

  Alt 1. Okt 2013, 16:17
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"
Markus
es gibt nur 10 arten von menschen !
die die binär verstehen und die die nicht. !
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: Type im einer Klasse -> public erlaubt?

  Alt 1. Okt 2013, 17:38
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:
type
  TEnumeration = (Onw, Two, Tree);
Wobei "kann" besser "sollte" heißen sollte, denn Namespace und Prefix zusammen sind ja ein bissl sinnlos.
$2B or not $2B

Geändert von himitsu ( 1. Okt 2013 um 17:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mokus
Mokus

Registriert seit: 24. Sep 2013
165 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Type im einer Klasse -> public erlaubt?

  Alt 2. Okt 2013, 07:59
Zitat:
Wobei "kann" besser "sollte" heißen sollte, denn Namespace und Prefix zusammen sind ja ein bissl sinnlos.
hust,
doppelt hält besser

irgendwer muss immer drunter leiden...
arme performance :p
Markus
es gibt nur 10 arten von menschen !
die die binär verstehen und die die nicht. !
  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 18:16 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