Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Problem mit eigener Klasse
speck12 - Sa 01.09.07 00:31
Titel: Problem mit eigener Klasse
Hallo allerseits!
Ich habe ein eher allgemeines Problem beim Erstellen einer eigenen Klasse, die von TBitmap abgeleitet wird und in einer seperaten Unit untergebracht werden soll.
Hier der Quelltext:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| unit Creep_unit;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;
type TCreep = class(TBitmap); constructor Create(Breite,Laenge : Integer ; Farbe : TColor); end
implementation
constructor TCreep.Create(Breite,Laenge : Integer ; Farbe : TColor); begin Inherited Create; end;
end. |
Nun sagt mir der Compiler allerdings, dass sowohl "Create" als auch "Destroy" unbekannte Bezeichner sind.
Wie kann ich diesen Missstand beheben?
Würde mich über Hilfe freuen.
Mfg
P.S: evtl ist es für die Frage relevant, dass ich Vista(32Bit) als OS nutze..
Christian S. - Sa 01.09.07 00:41
Mach mal das Semikolon nach "class(TBitmap)" weg. Damit schließt Du nämlich die Deklaration der Klasse ab. Es gehört also hinter das "end".
Außerdem sollte der Konstruktor als "public" deklariert werden.
Andreas L. - Sa 01.09.07 00:47
Ich bin mir zwar nicht ganz sicher. Aber die Basisklasse (TBitmap) hat mit bestimmt schon einen Constructor. Also muss noch ein override; hinter die Deklaration.
speck12 - Sa 01.09.07 00:48
Vielen Dank!
Da sieht man mal wieder, was ein ";" so anrichten kann^^.
Ich habe auch noch festgestellt, dass ein ";" nach dem ende der deklaration auch noch hin muss.
Bezüglich des public:
Wenn ich jetzt weder public noch protected in der Deklaration verwende, dann kann ich trotzdem alle Prozeduren in der MainUnit aufrufen. Wenn ich nun nicht beabsichtige Sachen als protected einzufügen, brauche ich dann unbedingt das public?
mfg
Christian S. - Sa 01.09.07 00:50
Andreas L. hat folgendes geschrieben: |
| Ich bin mir zwar nicht ganz sicher. Aber die Basisklasse (TBitmap) hat mit bestimmt schon einen Constructor. Also muss noch ein override; hinter die Deklaration. |
Ich bezweifle, dass Borland einen Konstruktor mit dieser Signatur geschrieben hat ;-)
Ich bin mir nicht sicher, was die Standard-Sichtbarkeit bei Delphi ist, wenn man sie nicht angibt. Daher schreibe ich's immer explizit hin ;) Aber wenn Du den protected-Abschnitt nach den Dingen einfügst, die öffentlich sein sollen, sollte das funktionieren.
speck12 - Sa 01.09.07 00:57
ok, ich denke ich werde mir angewöhnen, es auch explizit hinzuschreiben. Dann ist man, denke ich, immer auf der sicheren Seite.
Aber jetzt hab ich noch eine Frage:
Wieso kann ich keine einfachen Variablen deklarieren?
Wenn ich von TObject ableite, dann geht das ohne Probleme, möchte ich hier eine integer variable deklarieren, geht ads nicht und der Compiler sagt: "Das Published Feld "x" ist weder vom Typ class noch interface"..
Mfg
Christian S. - Sa 01.09.07 01:08
'N bisschen Quälcode brauch'mer dann schon, woher sollen wir sonst wissen, wie Du "x" deklariert hast ;-)
speck12 - Sa 01.09.07 01:12
Naja, eigentlich nichts besonderes^^ ...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| type TCreep = class(TBitmap) public constructor Create(Breite,Laenge : Integer ; Farbe : TColor); x : integer; destructor Destroy(); override; end; |
Christian S. - Sa 01.09.07 01:16
Aus der Dephi-Referenz:
| Zitat: |
| In einer Klassendeklaration müssen die Felder vor den Eigenschaften und Methoden angegeben werden. |
Gilt auch für Konstruktoren ;-)
speck12 - Sa 01.09.07 01:25
Aha, danke^^
Btw, was ist denn diese "Delphi-Referenz"? Gibt es da evtl mehr antworten auf etwaige Anfängerfragen?
JayEff - Sa 01.09.07 01:33
Also manchmal, um nicht zu sagen, oft hilft es, etwas zu markieren und einfach mal F1 zu drücken. SEHR nützlich, benutze auch ich ab und zu noch.
Wenn dir eine Compilerfehlermeldung begegnet, einfach mal draufklicken und F1 drücken. Befehl, den du nicht kennst? Markieren, F1 drücken. Wirklich ein guter Tipp an alle Anfänger, manchmal ist allerdings die Beschreibung die die OH liefert, etwas gewöhnungsbedürftig.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!