Toon posts:

[delphi] class not defined

Pagina: 1
Acties:

Verwijderd

Topicstarter
Een heel simpel probleem, maar weet de oplossing niet en kan deze ookniet in de search vinden.

in Delphi heb ik de volgende code:
code:
1
2
3
4
5
6
7
8
9
10
11
type
  TObserver = class
  procedure Update(ChangedSubject: TObservable); virtual; abstract;
end;

type
  TObservable = class
  procedure Add(Observer: TObserver); virtual; abstract;
  procedure Remove(Observer: TObserver); virtual; abstract;
  procedure Notify; virtual; abstract;
end;

Bij de procedure Update van TObserver krijg ik de foutmelding dat TObservable nog niet is gedeclareerd.

Met de "C-oplossing"
code:
1
type TObservable = class;

voor TObserver wordt het probleem niet opgelost.

Maar wat is wel de oplossing?

  • Eegee
  • Registratie: Januari 2000
  • Laatst online: 00:11
Misschien de ene in de interface en de ander onder implementation ?

edit: lama, werkt nie... d8 dat 't zoiets zou zijn... sorry

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 09-09 12:09

Delphi32

Heading for the gates of Eden

Op zondag 05 mei 2002 21:47 schreef master_n00b het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
type
  TObserver = class
  procedure Update(ChangedSubject: TObservable); virtual; abstract;
end;

type
  TObservable = class
  procedure Add(Observer: TObserver); virtual; abstract;
  procedure Remove(Observer: TObserver); virtual; abstract;
  procedure Notify; virtual; abstract;
end;

Bij de procedure Update van TObserver krijg ik de foutmelding dat TObservable nog niet is gedeclareerd.

Met de "C-oplossing"
code:
1
type TObservable = class;

voor TObserver wordt het probleem niet opgelost.

Maar wat is wel de oplossing?
De Delphi-help is op dit punt wel correct maar niet duidelijk. Het moet zijn:
code:
1
2
3
4
5
6
7
8
type
  TObservable = class; //forward declaration
  TObserver = class(TObject)
    procedure Update(ChangedSubject: TObservable); virtual; abstract;
    end;
  TObservable = class(TObject)
    ...
  end;

De truc is: een forward declaration mag je alleen gebruiken binnen een en hetzelfde type-blokje. Quote uit de Delphi help:
A forward declaration must be resolved by a defining declaration of the same class within the same type declaration section. In other words, between a forward declaration and its defining declaration, nothing can occur except other type declarations.