Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Mai 23, 2024 22:05

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Inkompatible Typen
BeitragVerfasst: Di Sep 20, 2011 15:00 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Nächstes Problem:

Ich möchte ein Objekt erstellen, und zwar von derselben Klasse, die auch ein anderes Objekt hat (und nicht bekannt ist)
probiert hab ich´s mit
Code:
  1. someobject:= otherobject.ClassType.Create(blablubb)
hat natürlich nicht funktioniert, weil TClass kein Create kennt außer eines ohne Parameter (welches ich aber nicht brauchen kann)
dann hab ich versucht, es über eine dummy-variable zu lösen, der ich das otherobject.ClassType zuweise (mit dem Typ class of TGemeinsameBasisKlasse (welche das nötige Create schon kennt)) Jetzt schreit er mir irgendwas von inkompatiblen Typen rum.

Wie kann ich stattdessen vorgehen, und, wenn man es keiner vernünftigen Variable zuweisen kann, wozu ist das ClassType eigentlich gut? Nur für "a is b.ClassType"?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Inkompatible Typen
BeitragVerfasst: Di Sep 20, 2011 17:03 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Ich hab' mal ein bischen rumprobiert und vielleicht die Lösung:
Code:
  1. type TClassBase = class
  2.       fv:Integer;
  3.       classnum:Byte;
  4.       constructor Create(v:Integer); virtual;
  5.      end;
  6.  
  7. type TClass1 = class(TClassBase)
  8.       constructor Create(v:Integer); override;
  9.      end;
  10.  
  11. type TClass2 = class(TClassBase)
  12.       constructor Create(v:Integer); override;
  13.      end;
  14.  
  15. [...]
  16.  
  17. constructor TClassBase.Create(v:Integer);
  18. begin
  19.   fv:=v;
  20.   classnum:=0;
  21. end;
  22.  
  23. constructor TClass1.Create(v:Integer);
  24. begin
  25.   fv:=v;
  26.   classnum:=1;
  27. end;
  28.  
  29. constructor TClass2.Create(v:Integer);
  30. begin
  31.   fv:=v;
  32.   classnum:=2;
  33. end;
  34.  
  35. procedure TForm1.FormCreate(Sender: TObject);
  36. var a:TObject;
  37.     b:TObject;
  38. begin
  39.   a:=TClass1.Create(1);
  40.   b:=TClassBase(a).Create(2);
  41.  
  42.   Form1.Caption:=Format('a.classnum = %d | b.classnum = %d',[TClassBase(a).classnum,TClassBase(b).classnum]);
  43. end;
  44.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Inkompatible Typen
BeitragVerfasst: Di Sep 20, 2011 17:49 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 31, 2007 18:32
Beiträge: 150
Programmiersprache: Pascal
Code:
  1. type TClassBase = class
  2.       fv:Integer;
  3.       classnum:Byte;
  4.       constructor Create(v:Integer); virtual;
  5.      end;
  6.  
  7. type TClass1 = class(TClassBase)
  8.       constructor Create(v:Integer); override;
  9.      end;
  10.  
  11. type TClass2 = class(TClassBase)
  12.       constructor Create(v:Integer); override;
  13.      end;
  14.  
  15. ...
  16. a:=TClass1.Create(1);
  17. TBaseClass(a.ClassType).Create(1); // erzeugt hier TClass1
  18.  


wenn das nicht funktioniert dann brauchst du :

Code:
  1.  
  2. type TBaseClassType = class of TBaseClass
  3. ...
  4. a:=TClass1.Create(1);
  5. TBaseClassType (a.ClassType).Create(1); // erzeugt hier TClass1
  6.  


bin mir da nichtmehr sicher


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Inkompatible Typen
BeitragVerfasst: Mi Sep 21, 2011 11:01 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
ok, funktioniert. danke.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.019s | 15 Queries | GZIP : On ]