Autor Beitrag
knittel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 71
Erhaltene Danke: 2

Win XP, Win7, openSUSE
Delphi 7
BeitragVerfasst: Mo 18.10.10 17:45 
Hallo Leute,
Ich habe ein Problem. Ich programmiere ein kleines 2D Spiel. Dabei soll es Gebäude und Einheiten geben.

Dabei habe ich ein paar Klassen erstellt:
TGameObject: Überklasse (beinhaltet Textur, Name und X,Y Position)
in der Datei RTSUnit

TUnit: Unterklasse von TGameObject (beinhaltet Geschwindigkeit und Ziel, etc.)
in der Datei RTSUnit

TStructure: Unterklasse von TGameObject (beinhaltet keine weiteren Werte)
in der Datei RTSStructure

In dem constructor von TStructure steht folgendes:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
constructor TStructure.Create(StructureType, AtX, AtY: cardinal);
begin
inherited Create (AtX, AtY); // Bezogen auf den Constructor von TGameObject
case StructureType of // Bestimmen um welche Einheit es sich handelt.
  0: FTexture := 'powerplant';
  end;
FImageIndex := FindImageIndex (); // Bestimmen welchen Index das Bild in der ImageList hat.
end;


Und in dem Constructor von TGameObject steht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
constructor TGameObject.Create (AtX, AtY: cardinal);
begin
FXpos := AtX; // Bestimmen der X Position
FYpos := AtY; // Bestimmen der Y Position
FMarked := false; // Die Einheit ist nicht markiert
end;


Das eigentlich Problem ist: Delphi meckert weil er FImageIndex und FTexture nicht kennt.
FImageIndex und FTexture sind beides private deklarierte Variablen von TGameObject. Da ich aber ja RTSUnit schon im interface von RTSStructure eingebunden habe müsste es eigentlich keine Probleme geben. Außerdem erkennt Delphi schon, dass TStructure von TGameObject erbt, aber irgendwie erbt er die private deklarierten Variablen nicht oder erkennt sie nicht.

Wie könnte ich das Problem lösen?

Danke im voraus.

P.S. Falls ihr mehr Code braucht um mir zu helfen, siehe Anhang.

Moderiert von user profile iconNarses: Code als Anhang hochgeladen.
Einloggen, um Attachments anzusehen!
_________________
"Wir können nicht fliehen!" "Wieso nicht?" "Sie haben mir die Schnürsenkel zusammengebunden!" "Die Schweine."
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mo 18.10.10 17:58 
Du hast keinen Zugriff auf private Variablen,etc.

für FTexture hast Du ja schon einen Setter/Getter Texture
für FImageIndex kannst Du einen ebensolchen implementieren

oder die Variablen inden public Bereich ziehen (dann aber nicht mehr FVariablenname nennen)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 18.10.10 18:40 
user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
oder die Variablen inden public Bereich ziehen (dann aber nicht mehr FVariablenname nennen)
Nein, public ist für nach außen hin sichtbare Felder. Wenn die abgeleiteten Klassen die Felder sehen sollen, gehören die unter protected. Dann sind diese nicht nach außen sichtbar, aber in der eigenen und abgeleiteten Klassen.

Für diesen Beitrag haben gedankt: knittel
knittel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 71
Erhaltene Danke: 2

Win XP, Win7, openSUSE
Delphi 7
BeitragVerfasst: Di 19.10.10 14:00 
Ich probiers jetzt gleich mal aus.
Vielen Dank. :)

_________________
"Wir können nicht fliehen!" "Wieso nicht?" "Sie haben mir die Schnürsenkel zusammengebunden!" "Die Schweine."
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Di 19.10.10 16:38 
Für den Zugriff von abgeleiteten Klassen auf die Eigenschaftenn der Überklasse sollte man eigendlich keine Getter/Setter verwenden. Zumindest nicht, wenn es nicht gebraucht wird.
Darum: protected

public: für alle sichtbar
private: nur für eigene klasse sichtbar
protected: für eigene und abgeleitete klassen sichtbar. aber nicht nach außen
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 19.10.10 16:40 
user profile iconFlamefire hat folgendes geschrieben Zum zitierten Posting springen:
private: nur für eigene klasse sichtbar
Um genau zu sein auch innerhalb der Unit. Nur innerhalb der Klasse geht mit "strict private".
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Di 19.10.10 16:45 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconFlamefire hat folgendes geschrieben Zum zitierten Posting springen:
private: nur für eigene klasse sichtbar
Um genau zu sein auch innerhalb der Unit. Nur innerhalb der Klasse geht mit "strict private".

Gleiches gilt für protected. Da ebenfalls ein "strict" davor, wenn mans brauch.