| Autor |
Beitrag |
speck12
      
Beiträge: 36
|
Verfasst: Sa 01.09.07 00:31
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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Andreas L.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: 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 
      
Beiträge: 36
|
Verfasst: 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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
speck12 
      
Beiträge: 36
|
Verfasst: 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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Sa 01.09.07 01:08
'N bisschen Quälcode brauch'mer dann schon, woher sollen wir sonst wissen, wie Du "x" deklariert hast 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
speck12 
      
Beiträge: 36
|
Verfasst: 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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
speck12 
      
Beiträge: 36
|
Verfasst: 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
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: 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.
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|