schmat Geschrieben 10. März 2008 Geschrieben 10. März 2008 Hallo, bin kein Programmierer, aber weil man es in der Ausbildung auch lernen muss, versuche ich gerade den Anfang eines Programmes, dass wir in der Schule auch programmieren zu meistern. 1-2-3 Streichholz, wer es kennt. Meine Klasse: Type TStreichholz = Class(TObject) private Bitmap: TBitmap; Anzahl:Byte; public constructor Create(); destructor Destroy; procedure Anzeigen(x,y: integer; Ausgabe: TPaintbox); function Zahlenwert: integer; end; Der Constructor: constructor TStreichholz.Create(); var filename: string; begin inherited create; bitmap:= TBitmap.Create; filename:= 'Streichholz.bmp'; bitmap.LoadFromFile(filename); Randomize; Anzahl:=17+random(13); end; Wenn ich jetzt im Testprogramm die Variable Anzahl aufrufen will, kommt der Fehler:[Fehler] Unit1.pas(43): Undefinierter Bezeichner: 'Anzahl' So sieht die Prozedur des Button Klicks aus: procedure TForm1.Button1Click(Sender: TObject); begin PaintBox1.Refresh; posX := 0; Label1.Caption:='Anzahl: '; Streichholz:=TStreichholz.Create; for i:=1 to Anzahl do begin Streichholz.Anzeigen(posX,posY,PaintBox1); posX := posX + 15; end; Label1.Caption:= Label1.Caption + InttoStr(Anzahl); end; Davor habe ich natürlich noch deklariert: Streichholz:TStreichholz; posX,posY:Integer; i:integer; Kann mir bitte jemand helfen? Zitieren
Klotzkopp Geschrieben 10. März 2008 Geschrieben 10. März 2008 Anzahl ist ein Attribut der Klassen TStreichholz. Du brauchst also ein Streichholz-Objekt, um auf dessen Anzahl-Attribut zugreifen zu können. Du musst also Streichholz.Anzahl schreiben. Deine Klasse ist aber vom Designstandpunkt eher unglücklich. Eigentlich ist die Klasse nur ein Hilfscontainer für eine Variable und ein paar Methoden, und repräsentiert kein wirkliches Objekt. Ein Streichholz stellt die Klasse (trotz ihres Namens) sicher nicht dar, denn ein einzelnes Streichholz hätte kein Anzahl-Attribut. Zitieren
schmat Geschrieben 10. März 2008 Autor Geschrieben 10. März 2008 streichholz.anzahl geht auch nicht. Ich habe jetzt der Funktion "zahlenwert" den Wert "Anzahl" zugewiesen, jetzt habe ich aber das Problem beim subtrahieren, also wenn ich den Wert "Anzahl" kleiner machen will. case RadioGroup1.ItemIndex of 0: Streichholz.Zahlenwert:= Streichholz.Zahlenwert- 1; Es kommt die Fehlermeldung:[Fehler] Unit1.pas(59): Der linken Seite kann nichts zugewiesen werden wie kann ich jetzt was von Anzahl abziehen? Zitieren
Klotzkopp Geschrieben 10. März 2008 Geschrieben 10. März 2008 streichholz.anzahl geht auch nicht."Geht nicht" ist keine ausreichende Fehlerbeschreibung. Anzahl ist private, ist dir klar, was das bedeutet? Zitieren
schmat Geschrieben 10. März 2008 Autor Geschrieben 10. März 2008 private = von außen nicht zugreifbar, oder? Ich habe es jetzt aber der Funktion (public) Zahlenwert zugewiesen. Oder ist dann immer noch von außen nicht zugreifbar. Er sagt ja jetzt: [Fehler] Unit1.pas(59): Der linken Seite kann nichts zugewiesen werden Zitieren
Klotzkopp Geschrieben 10. März 2008 Geschrieben 10. März 2008 private = von außen nicht zugreifbar, oder?Richtig. Ich habe es jetzt aber der Funktion (public) Zahlenwert zugewiesen. Du kannst einer Funktion nichts zuweisen. Allenfalls kannst du sie aufrufen. Deine Funktion hat aber keine Parameter. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.