AGB  ·  Datenschutz  ·  Impressum  







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

Zirkuläre Unit Reference

Ein Thema von Koolance · begonnen am 24. Nov 2006 · letzter Beitrag vom 28. Nov 2006
Antwort Antwort
Seite 1 von 3  1 23      
Koolance

Registriert seit: 28. Feb 2006
Ort: Kerpen
74 Beiträge
 
Delphi 6 Enterprise
 
#1

Zirkuläre Unit Reference

  Alt 24. Nov 2006, 09:50
Hi,
ich schreibe gerade einen Quellcodegenerator der aus einer Datenbank eine Mittelschicht erzeugt (oder besser die Grundlage dafür).
Für jede Klasse wird eine eigene Unit erzeugt.

Beispiel für mein Problem.

Tabellen
Adresse------<Matchcode
Eine Adresse hat N Matchcodes. Ein Matchcode aber immer nur eine Adresse.

Lösung für die Zwischenschicht
Adresse.Liste_Matchcodes.Matchcode (in Adresse wird in der uses Liste_Matchcodes verwendet, in der uses von List_Matchodes Matchcode)
Matchcode.Adresse (in Matchcode wird in der uses Adresse Verwendet)

Probleme
Ich will die oben beschrieben Funktionalität, aber nicht alle Klassen in eine Unit schreiben.
Die Uses müssen im Interface-Bereich stehen da ich die Objekte als Klassenvariablen verwende.

Lösungsansätze

http://www.delphipraxis.net/internal...rkul%E4re+unit
Zitat:
Zudem kann man die Typdeklaration in eine Dritte Unit auslagern, die dann beide nutzen.
Habe mir eine Unit declarations erstellt alles in sie eingebunden und sie in meinen Klassen verwendet, das klappt aber überhaupt nicht.


http://www.delphipraxis.net/internal...rkul%E4re+unit
Zitat:
bei einem von beiden muss die Uses-Klausel dann in den implementation-Teil...allerdings kannst du dann die Klassendeklaration nicht mehr verwenden

ich glaube du kannst eine Art "Vordeklaration" machen, indem nur nur bekanntgibst, das es so eine Klasse gibt (type Elternklasse = class ohne eine richtige Deklaration, und dann die wirkliche Deklaration erst im implementation-Teil via uses includes....

bin mir aber nicht sicher...
Klingt gut, habe aber leider nichts dazu gefunden.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Zirkuläre Unit Reference

  Alt 24. Nov 2006, 09:53
Zitat:
Klingt gut, habe aber leider nichts dazu gefunden.
Wurde doch beschrieben: Einfach

type TKlassenNamen = class; und später richtig deklarieren.
Markus Kinzler
  Mit Zitat antworten Zitat
Koolance

Registriert seit: 28. Feb 2006
Ort: Kerpen
74 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Zirkuläre Unit Reference

  Alt 24. Nov 2006, 10:06
So einfach das klingt ich mache es wohl falsch.
Beispiele

Delphi-Quellcode:
unit ADDRESS;

interface
uses
  Classes, DBXpress, SqlExpr, db, SysUtils ,base,sqlparser,
  datastructs;

type list_ADD_MATCHCODE = class;
type


//***********************
//****Kopf Basisklasse***
//***********************
  TADDRESS = class(TBase)

....

implementation
uses list_ADD_MATCHCODE;
Fehlermeldung: Typ list_ADD_MATCHCODE ist nicht vollständig definiert.

Delphi-Quellcode:
unit ADDRESS;

interface
uses
  Classes, DBXpress, SqlExpr, db, SysUtils ,base,sqlparser,
  datastructs;


type
type list_ADD_MATCHCODE = class;

//***********************
//****Kopf Basisklasse***
//***********************
  TADDRESS = class(TBase)
....

implementation
uses list_ADD_MATCHCODE;
Fehlermeldungen:
Bezeichner erwartet aber Type gefunden.
Typ list_ADD_MATCHCODE ist nicht vollständig definiert.

[edit=SirThornberry]Zitat-Tags durch Delphi-Tags ersetzt - Mfg, SirThornberry[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Zirkuläre Unit Reference

  Alt 24. Nov 2006, 10:09
Heißt deine Unit genauso wie der Typ?

Verwendet TAddress die Klasse list_ADD_MATCHCODE oder warum muss list_ADD_MATCHCODE vorher definiert werden?
Ich glaub mit einer dritten Unit wäre das lösbar.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Koolance

Registriert seit: 28. Feb 2006
Ort: Kerpen
74 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: Zirkuläre Unit Reference

  Alt 24. Nov 2006, 10:13
Delphi-Quellcode:
unit ADDRESS;

interface
uses
  Classes, DBXpress, SqlExpr, db, SysUtils ,base,sqlparser,
  datastructs;


type
Tlist_ADD_MATCHCODE = class;

//***********************
//****Kopf Basisklasse***
//***********************
  TADDRESS = class(TBase)
....

implementation
uses list_ADD_MATCHCODE;
Klappt auch nicht sieht aber richtiger aus.

Unitname: list_ADD_MATCHCODE
Typname: Tlist_ADD_MATCHCODE
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Zirkuläre Unit Reference

  Alt 24. Nov 2006, 10:15
Ja, klappen wird das so nicht. Die Declaration muss vollständig im Interfaceteil abgeschlossen werden.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Koolance

Registriert seit: 28. Feb 2006
Ort: Kerpen
74 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: Zirkuläre Unit Reference

  Alt 24. Nov 2006, 10:20
Dann wäre es ja so richtig:
Delphi-Quellcode:
unit ADDRESS;

interface
uses
  Classes, DBXpress, SqlExpr, db, SysUtils ,base,sqlparser,
  datastructs;

type Tlist_ADD_MATCHCODE = class;
type


//***********************
//****Kopf Basisklasse***
//***********************
  TADDRESS = class(TBase)
....

implementation
uses list_ADD_MATCHCODE;
Bringt aber die Fehlermeldung: Typ list_ADD_MATCHCODE ist nicht vollständig definiert.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#8

Re: Zirkuläre Unit Reference

  Alt 24. Nov 2006, 10:36
Hallo,

der Ansatz in Beitrag #3 war schon richtig. Du darfst aber nicht Folgendes machen:
Delphi-Quellcode:
type
  TClass1 = class;

type
  TClass2 = class(TObject)
    FClass1: TClass1;
  end;

  TClass1 = class(TObject)
    FClass2: TClass2;
  end;
sondern Folgendes:
Delphi-Quellcode:
type
  TClass1 = class;

  TClass2 = class(TObject)
    FClass1: TClass1;
  end;

  TClass1 = class(TObject)
    FClass2: TClass2;
  end;
Beachte: Es gibt nur eine Deklaration (ein "type").

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Koolance

Registriert seit: 28. Feb 2006
Ort: Kerpen
74 Beiträge
 
Delphi 6 Enterprise
 
#9

Re: Zirkuläre Unit Reference

  Alt 24. Nov 2006, 10:47
Das entspricht meinem Beitrag 5, funktioniert aber leider auch nicht.

Aber ich weiß jetzt warum, ich hatte bei der deklaration vergessen das alle Klassen von TBase abgeleitet sind. Habe es gerade geändert und es funktioniert.

Delphi-Quellcode:
unit ADDRESS;

interface
uses
  Classes, DBXpress, SqlExpr, db, SysUtils ,base,sqlparser,
  datastructs;


type
Tlist_ADD_MATCHCODE = class(TBASE);

//***********************
//****Kopf Basisklasse***
//***********************
  TADDRESS = class(TBase)
....

implementation
uses list_ADD_MATCHCODE;
Vielen Dank euch allen
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: Zirkuläre Unit Reference

  Alt 24. Nov 2006, 10:51
Zitat von Koolance:
Das entspricht meinem Beitrag 5, funktioniert aber leider auch nicht.
Hinweis: Unter Umständen kann es passieren, dass Delphi die Klassen-Forward Deklarationen nicht anerkennt, wenn die Deklaration der Klasse entgegen der Forward Deklaration mit einem neuen Type eingeleitet wurde.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 13:50 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