AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi "Unbekannter Bezeichner" bei Eigenschaft eines Objektes
Thema durchsuchen
Ansicht
Themen-Optionen

"Unbekannter Bezeichner" bei Eigenschaft eines Objektes

Ein Thema von BillieJoe90 · begonnen am 14. Okt 2006 · letzter Beitrag vom 14. Okt 2006
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von BillieJoe90
BillieJoe90

Registriert seit: 29. Sep 2006
Ort: Bovenden
122 Beiträge
 
#1

"Unbekannter Bezeichner" bei Eigenschaft eines Obj

  Alt 14. Okt 2006, 10:38
Hallo,
ich habe folgenden Code in einer seperaten Unit:

Delphi-Quellcode:
  type TFeld = class(TObject)
  public
    Name:String;
    Bild:TPicture;
    FeldNr:Integer;
  private

  end;

  TGrundstueck = class(TFeld)
  public
    Preis:Integer;
  private

  end;
In der "Haupt-Unit" dann folgendes:
Delphi-Quellcode:
procedure TSpielbrett.FormCreate(Sender: TObject);
var
  iniFile: TIniFile;
  FeldNr2:TFeld;
begin
  FeldNr2 := TGrundstueck.Create();
  FeldNr2.Name := iniFile.ReadString('Feld2', 'Name', 'Braun1');
  FeldNr2.Preis := iniFile.ReadInteger('Feld2', 'Preis', 1200);
end;
Die Eigenschaft Preis ist ihm nicht bekannt, Name aber wohl.

Ich kann mir das nicht erklären, weil man solche Probleme als PHP-Programmierer nicht kennt
Die Eigenschaft ist doch unter public deklariert und selbst die geerbten Eigenschaften kennt er ja.

Kann mir jemand helfen?

Danke schonmal!

Johannes
Johannes
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#2

Re: "Unbekannter Bezeichner" bei Eigenschaft eines

  Alt 14. Okt 2006, 10:50
FeldNr2 musst Du als TGrundstueck deklarieren.

Oder den Typ casten:

(FeldNr2 as TGrundstueck).Preis := Vergiss Vergleiche mit PHP: PHP ist bei der Objektorientierung nicht sehr gut implementiert. Vieles geht nicht und vieles anderes geht falsch.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: "Unbekannter Bezeichner" bei Eigenschaft eines

  Alt 14. Okt 2006, 10:51
Zitat von BillieJoe90:
Die Eigenschaft Preis ist ihm nicht bekannt, Name aber wohl.

Ich kann mir das nicht erklären, weil man solche Probleme als PHP-Programmierer nicht kennt
Die Eigenschaft ist doch unter public deklariert und selbst die geerbten Eigenschaften kennt er ja.
Hi,
eigentlich sollte das Problem hier in jeder Objekt Orientierten Sprache auftauchen. Dein FeldNr2 ist vom Typ ein TFeld, es sind für diese Variable also alle Eigenschaften von TFeld vorhanden (dass sagst du dem Compiler). Erzeugen tust du ein TGrundstueck. Der Compiler schaut nun, ob ein TGrundstueck mind. alle Eigenschaften eines TFeld hat. Erzeugst du direkt eine Instanz der Klasse, von deren Typ die Variable ist (also TFeld.Create) oder von einer Klasse die von ihr erbt, so wird der Compiler nicht meckern (analog bei einem Interface IFeld und allen Klassen die es implementieren oder von einer Klasse erben die es implementiert).

Das du in FeldNr2 ein spezielles TFeld speicherst ist Delphi egal. Du sagst schließlich, dass du nur die Eigenschaften eines TFeld verwenden möchtest. Genau hier liegt auch der Sinn der OOP. Du brauchst halt kein Detailwissen über alle möglichen Implementierungen. Du solltest dir also mal ein wenig zum Theme OOP anschauen, dann verstehst du schnell wann du welchen Variablentyp verwendest!

Gruß Der Unwissende
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#4

Re: "Unbekannter Bezeichner" bei Eigenschaft eines

  Alt 14. Okt 2006, 10:57
Das eigentliche Problem haben ja schon bttb930 und Der Unwissende erläutert, trotzdem hier nochmal n Hinweis:

Man sollte - sowohl in PHP, alsauch in Delphi - keine public fields anlegen. Warum? Lies dir mal folgenden Text durch: http://tut.php-q.net/klassen.html Insbesonder Kapitel 6. Is sogar PHP, lässt sich aber leicht auf Delphi übertragen...

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von BillieJoe90
BillieJoe90

Registriert seit: 29. Sep 2006
Ort: Bovenden
122 Beiträge
 
#5

Re: "Unbekannter Bezeichner" bei Eigenschaft eines

  Alt 14. Okt 2006, 10:59
Zitat von bttb930:
FeldNr2 musst Du als TGrundstueck deklarieren.

Oder den Typ casten:

(FeldNr2 as TGrundstueck).Preis := Vergiss Vergleiche mit PHP: PHP ist bei der Objektorientierung nicht sehr gut implementiert. Vieles geht nicht und vieles anderes geht falsch.
Ja, das funktioniert. Aber ehrlich gesagt möchte ich das nicht immer so schreiben
Gibt es eine Möglichkeit, das irgendwie einmal zu casten und von da an ist es gecastet und ich muss nur `"FeldNr2." schreiben?
Johannes
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#6

Re: "Unbekannter Bezeichner" bei Eigenschaft eines

  Alt 14. Okt 2006, 11:05
Deklariers einfach als TGrundstück. Und wenn du das nicht willst, mach ne 2. Variable:
Delphi-Quellcode:
var
  f: TFeld
  g: TGrundstueck;
begin
  ...
  g := (TFeld as TGrundstueck);
mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#7

Re: "Unbekannter Bezeichner" bei Eigenschaft eines

  Alt 14. Okt 2006, 11:17
Woür die Klammern? Sieht doch doof aus.
@Billie, was du da erlebt hast ist die statische Typensicherheit von kompilierten Programmen verglichen mit dem Ducktyping von interpretierten Skriptsprachen.
Der Vorteil hier it, dass du seltener Probleme haben wirst, dass dir das Programm zur Laufzeit um die Ohren fliegt. Der Compiler kann viele Dinge schon beim Überetzen abfangen und bemängeln.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von BillieJoe90
BillieJoe90

Registriert seit: 29. Sep 2006
Ort: Bovenden
122 Beiträge
 
#8

Re: "Unbekannter Bezeichner" bei Eigenschaft eines

  Alt 14. Okt 2006, 11:45
Zitat von Elvis:
Woür die Klammern? Sieht doch doof aus.
@Billie, was du da erlebt hast ist die statische Typensicherheit von kompilierten Programmen verglichen mit dem Ducktyping von interpretierten Skriptsprachen.
Der Vorteil hier it, dass du seltener Probleme haben wirst, dass dir das Programm zur Laufzeit um die Ohren fliegt. Der Compiler kann viele Dinge schon beim Überetzen abfangen und bemängeln.
Also die paar Exception-Prüfungen würde ich in Kauf nehmen, um nicht diese stressige "Typen-Gebundeheit" zu haben...
Johannes
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#9

Re: "Unbekannter Bezeichner" bei Eigenschaft eines

  Alt 14. Okt 2006, 11:52
Hallo,
Zitat von BillieJoe90:
Also die paar Exception-Prüfungen würde ich in Kauf nehmen, um nicht diese stressige "Typen-Gebundeheit" zu haben...
Diese 'stressige Typen-Gebundenheit' ist aber doch genau einer der wesentlichen Vorteile. .Net geht hier sogar noch viel weiter. Es ist doch immer besser, Fehler gar nicht erst zuzulassen, als mit Exceptions hinterherzuräumen. Außerdem sollen Exceptions ja Ausnahmen sein, und nicht die Regel . Es sollte also niemals einem Delphi-Programmierer passieren, dass ein Cast eine Exeption wirft, sonst hat er etwas grundlegendes falsch gemacht.
Die strikte Typen-Gebundenheit hilft Dir übrigens auch beim Programmieren. Denn wenn die IDE nicht weiß, welcher Typ sich hinter der Variable befindet, kann sie Dir auch nicht unter die Arme greifen.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Benutzerbild von BillieJoe90
BillieJoe90

Registriert seit: 29. Sep 2006
Ort: Bovenden
122 Beiträge
 
#10

Re: "Unbekannter Bezeichner" bei Eigenschaft eines

  Alt 14. Okt 2006, 12:15
Mir ist grad eine Idee gekommen, aber ich bezweifle, dass das um zu setzen ist:
Gibt es in Delphi die Möglichkeit, einen "Link" zu setzen. Jetzt mal ein Beispiel:

Delphi-Quellcode:
procedure Irgendwas();
  var
    Feld:Array[1..41] of Link; //oder wie es halt heißt...
    Feld1:TGrundstueck;
    Feld2:TWasAnderes;
begin
  Feld[1] := Feld1;
  Feld[1].methodeVonTGrundstueck();
end;
Versteht ihr, was ich meine?
Johannes
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz