Autor Beitrag
speck12
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: 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:

ausblenden 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);
  // procedure get_x;
  // procedure get_y;
 //  procedure set_x;
 //  procedure set_y;
 //  destructor Destroy();
  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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 01.09.07 00:50 
user profile iconAndreas 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: Sa 01.09.07 01:12 
Naja, eigentlich nichts besonderes^^ ...

ausblenden 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;
  // procedure get_x;
  // procedure get_y;
  // procedure set_x;
  // procedure set_y;
   destructor Destroy(); override;
  end;
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: 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.

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.