[delphi] Volgorde van type/class definieren.

Pagina: 1
Acties:

  • PostbodeSiemen
  • Registratie: Maart 2000
  • Laatst online: 19-08-2024
Ik heb het volgende probleem bij het declareren van mijn classes
code:
1
2
3
4
5
6
7
8
9
10
Type
   IObservable = interface
      procedure   attachObserver(var newObserver: IObserver);
      procedure   detachObserver(var ObserverToRemove: IObserver);
      procedure   notify;
   end;

   IObserver = interface
       procedure  update(observable : IObservable);
   end;

geeft de foutmelding
[Error] CTLogObservable.pas(7): Undeclared identifier: 'IObserver'

en
code:
1
2
3
4
5
6
7
8
9
10
Type
   IObserver = interface(IInterface)
       procedure  update(observable : IObservable);
   end;

   IObservable = interface
      procedure   attachObserver(var newObserver: IObserver);
      procedure   detachObserver(var ObserverToRemove: IObserver);
      procedure   notify;
   end;

geeft:
[Error] CTLogObservable.pas(7): Undeclared identifier: 'IObservable'

Dit is dus een beetje vervelend |:(
Hij kijkt niet vooruit dus er is er altijd één waar hij op stuk loopt.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
Doe het eens als volgt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
  Type
     IObservable = Interface ;

  Type 
     IObserver = Interface
       procedure Update (observ  : IObservable);
     end;

  Type 
    IObservable = interface
       .. .bla...
    end;


Je geeft dus eerst gewoon aan dat IObservable bestaat, maar je werkt het later uit.

https://fgheysels.github.io/


  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 31-08 21:58

Delphi32

Heading for the gates of Eden

Forward declaration gebruiken.
code:
1
2
3
4
5
6
7
8
9
10
11
12
type
  IObserver = interface; //dit is de forward declaration
  
  IObservable = interface
    procedure attachObserver(var newObserver: IObserver);
    //IObservable 'kent' dus nu het IObserver ding
  end;
  
  //en nu kan ie gedefinieerd worden.
  IObserver = interface(IInterface)
    procedure Update
  end;


[edit]2 zielen 1 gedachte met 1 minuut verschil >:)

  • PostbodeSiemen
  • Registratie: Maart 2000
  • Laatst online: 19-08-2024
Snel en doeltreffend, bedankt :)

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

code:
1
2
3
4
5
6
7
8
9
10
11
12
Type
   IObserver = interface;

   IObservable = interface
      procedure   attachObserver(var newObserver: IObserver);
      procedure   detachObserver(var ObserverToRemove: IObserver);
      procedure   notify;
   end;

   IObserver = interface
       procedure  update(observable : IObservable);
   end;


Forward declaratie heet dat

[ Voor 0% gewijzigd door LordLarry op 14-08-2002 11:12 . Reden: Telaat, er waren er al 3 voor me binnen een minut. Mental note: Sneller typen.... ]

We adore chaos because we like to restore order - M.C. Escher