Thema: Delphi Delphi Namespaces

Einzelnen Beitrag anzeigen

Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Delphi Namespaces

  Alt 30. Jul 2014, 16:57
Delphi-Version: XE4
Hallo,

Kann es sein dass Delphi-Namespaces der letzte Dreck sind? Habe mal einen Beispiel-Quelltext der einfach nur lächerlich ist.

Erstmal ein Zitat aus dem Emba-Wiki:

Zitat:
// in file 'unit1.pas'
unit MyCompany.ProjectX.ProgramY.Unit1

// in file 'unit2.pas'
unit MyCompany.ProjectX.ProgramY.Unit2

In diesem Beispiel enthält der Namespace MyCompany.ProjectX.ProgramY alle interface-Symbole aus unit1.pas und unit2.pas.
Symbolnamen in einem Namespace müssen für alle Units in dem Namespace eindeutig sein. Im obigen Beispiel wäre es ein Fehler, wenn für Unit1 und Unit2 ein globales Interface-Symbol namens mySymbol definiert wäre.
Jetzt mein Beispiel:

Delphi-Quellcode:
unit MeinKram.ErsteKlasse;

interface

type
  TErsteKlasse = class
  private
    FObjekt: TZweiteKlasse; // #1
  public

  end;

  // Wie vom Wiki gesagt: es gibt einen Fehler weil die Klasse nur 1x pro Namespace definiert sein darf
  TZweiteKlasse = class // #2

  end;

implementation

end.
Delphi-Quellcode:
unit MeinKram.ZweiteKlasse;

interface

type
  // Wie vom Wiki gesagt: es gibt einen Fehler weil die Klasse nur 1x pro Namespace definiert sein darf
  TZweiteKlasse = class
  private
    FObjekt: TErsteKlasse;
  public

  end;

implementation

end.
Beim compilieren bekomme ich 2 Fehler:

#1: [dcc32 Fehler] MeinKram.ErsteKlasse.pas(8): E2003 Undeklarierter Bezeichner: 'TZweiteKlasse'
#2: [dcc32 Fehler] MeinKram.ErsteKlasse.pas(13): E2004 Bezeichner redefiniert: 'TZweiteKlasse'

Da oben ist TZweiteKlasse undeklariert und ein paar Zeilen drunter ist er redifiniert? Das ist doch ein Witz oder?
So undeklariert kann TZweiteKlasse Klasse ja nicht sein wenn Sie ne Typdefinition weiter drunter laut Compiler redifiniert wurde..

Kann Embarcadero vllt. mal an ordentlichen Namespaces arbeiten? Das Beispiel zeigt doch wohl recht deutlich dass die Implementierung nicht mehr als ein Witz sein kann.

Wenn Sie es wenigstens nur "Punkte im Dateinamen von Units" nennen würden wäre es wenigstens ehrlich...

Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat