![]() |
OOP - Neuling braucht ein bisschen Hilfe
Hiho,
ich hab noch nicht lange OOP und ich brüte grade über einer Aufgabe und komme nicht weiter. Ich hab eine Radiogroup mit 4 EInträgen (wovon ich jewals immer den Titel wieder ausgeben will, z.B. Verbrennungsmotor) Allerdings kommen (im Moment) 2 Fehlermeldungen: Nicht genügent wirkliche Parameter und Inkompatible Typen. Wie geb ich den Klassennahmn in der Memo aus? Und Hier muss auch noch eine Unit dazu, wo Alternativfahrzeuge (Elektro, Wasserstoff) definiert werden (soweit bin ich aber noch nicht).
Delphi-Quellcode:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, unit2, unit3; type TForm1 = class(TForm) RadioGroup1: TRadioGroup; Memo1: TMemo; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; Auto: TFahrzeug; M_Leistung: string; M_Bezeichnung: boolean; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin if RadioGroup1.itemindex=0 then Auto:= TFahrzeug.create(Edit1.text, Radiogroup1.itemindex=0); {If RadioGroup1.itemindex=1 then Auto := TAlternativfahrzeug.create(Edit1.text, Edit3.text);} If Radiogroup1.itemindex=2 then Auto:= THybridfahrzeug.create (Edit1.text, Edit2.text); {If RadioGroup1.ItemIndex=3 then Auto := TAlternativfahrzeug.create (Edit1.text, Edit3.text);} //memo1.lines.add:=M_Leistung; end; end.
Delphi-Quellcode:
unit Unit2;
//Fahrzeug allgemein interface uses sysutils; Type TFahrzeug = class (TObject) private public constructor create (M_Bezeichnung: string; M_Leistung: string); function getleistung: string; //function getMotorBezeichnung: string; //function getreichweite: integer; virtual; abstract; end; var Bezeichnung: string; Leistung: string; M_Leistung, M_Bezeichnung: string; implementation constructor TFahrzeug.create (M_Bezeichnung: string; M_Leistung: string); begin M_Bezeichnung :=Bezeichnung ; M_Leistung :=Leistung ; end; function TFahrzeug.getleistung: string; begin result := M_Leistung ; end; end.
Delphi-Quellcode:
MfG & Danke schonmal im Vorraus
unit Unit3;
//Fahrzeug Hybrid interface uses sysutils, unit2; Type THybridfahrzeug = class (TFahrzeug) private public constructor create (M_Bezeichnung: string; M_Leistung, E_M_Leistung: string); //function getleistung: string; virtual; //function getMotorBezeichnung: string; //function getreichweite: string; virtual; abstract; end; var Bezeichnung: string; Leistung, Zusatzleistung:string; M_Leistung: string; implementation constructor THybridfahrzeug.create (M_Bezeichnung: string; M_Leistung,E_M_Leistung: string); begin inherited create (Bezeichnung, Leistung); E_M_Leistung := Zusatzleistung; end; end. Liam |
Re: OOP - Neuling braucht ein bisschen Hilfe
Ich würde mal behaupten du solltest dir in deine RadioGroup auch ein paar RadioButtons einbauen und dann prüfen welches gesetzt ist in etwa so:
Delphi-Quellcode:
das sollte dich erst mal weiter bringen.
if RadioButton1.Checked then
begin // tue was end; Aso an den Text aus den RadioButtons kommst du dann so ran:
Delphi-Quellcode:
RadioButton1.Caption
|
Re: OOP - Neuling braucht ein bisschen Hilfe
Hallo Liam,
Herzlich Willkommen in der DP! :party:
Delphi-Quellcode:
Der Fehler werden wohl hier kommen. Radiogroup1.itemindex=0 ist ein Boolean! TFahrzeug.create erwartet aber einen String als 2ten Parameter.
Auto:= TFahrzeug.create(Edit1.text, Radiogroup1.itemindex=0);
Ich würde weiterhin a) Die Komponenten auf der Form (Edit1, Edit2 etc) richtig benennen b) Konsequent einrücken c) Anstatt if ItemIndex=1 if ItemIndex=2 if ItemIndex=3 etc ein Case-Construct nehmen @AnyKey: Bitte nicht auf = True prüfen! |
Re: OOP - Neuling braucht ein bisschen Hilfe
Danke für eure Hilfe ihr beiden. Ich hab die If-Anweisungen mal in eine Case gepackt, und jetzt hab ich auch kein Problem mehr mit inkompatiblen Typen. Allerdings kommt jetzt folgende Meldung:
"Konstantenausruck erwartet"
Delphi-Quellcode:
Da ich nicht mehr wusste, wie man eine Case-Anweisung schreibt, hab ich mal im Internet geschaut und unter anderem folgendes gefunden:
var
Form1: TForm1; Auto: TFahrzeug; M_Leistung: string; M_Bezeichnung: string; Bezeichnerwahl: boolean; procedure TForm1.AnlegenClick(Sender: TObject); begin case Bezeichnerwahl of Radiogroup1.itemindex=0 : begin M_Bezeichnung:= 'Verbrennungsmotor'; end; Radiogroup1.itemindex=1 : begin M_Bezeichnung:= 'Elektromotor'; end; Radiogroup1.itemindex=2 : begin M_Bezeichnung:= 'Hybridantrieb'; end; Radiogroup1.itemindex=3 : begin M_Bezeichnung:= 'Wasserstoffantrieb'; end; end;
Delphi-Quellcode:
Bei diesem Beispiel ist es ja auch nicht anders geschrieben als wie bei mir.
var Note: Integer;
Wertung: String; CASE Note OF 1 : Wertung := 'Sehr gut'; 2 : Wertung := 'Gut'; 3 : Wertung := 'Befriedigend'; 4 : Wertung := 'Ausreichend'; 5 : Wertung := 'Mangelhaft'; 6 : Wertung := 'Ungenügend'; ELSE Wertung := 'Diesen Notenwert gibt es nicht.'; END; //von CASE |
Re: OOP - Neuling braucht ein bisschen Hilfe
Zitat:
|
Re: OOP - Neuling braucht ein bisschen Hilfe
Statt
Delphi-Quellcode:
versuche einmal
case Bezeichnerwahl of
Radiogroup1.itemindex=0 : begin
Delphi-Quellcode:
Gruss
case Bezeichnerwahl of
Radiogroup1.itemindex=StrToInt('0') : begin Wolfgang |
Re: OOP - Neuling braucht ein bisschen Hilfe
Zitat:
|
Re: OOP - Neuling braucht ein bisschen Hilfe
Zitat:
Leider funtkioniert das auch nicht. Selber fehler. |
Re: OOP - Neuling braucht ein bisschen Hilfe
hoi,
mal als Bsp.
Delphi-Quellcode:
in deiner Case anweisung hast du zwar eine Boolean Var verwendet (Bezeichnerwahl) aber das ist nicht das was du
case Boolean of
True: ... False:... end; oder case Zahl of 0: 1: 2: end; eigentlich prüfen willst (--> ItemIndex). Die einzelnen Zustände (True/False ; 0/1/2 ; etc) kannst du dann direkt hinschreiben. cya |
Re: OOP - Neuling braucht ein bisschen Hilfe
.. wenn alle Tips nicht helfen:
Delphi-Quellcode:
denn es ist der ItemIndex der sich ändert wenn
procedure TForm1.AnlegenClick(Sender: TObject);
begin case RadioGroup1.itemIndex of 0 : begin M_Bezeichnung:= 'Verbrennungsmotor'; end; 1 : begin M_Bezeichnung:= 'Elektromotor'; end; 2 : begin M_Bezeichnung:= 'Hybridantrieb'; end; 3 : begin M_Bezeichnung:= 'Wasserstoffantrieb'; end; end; du einen RadioButton der RadioGroup anklickst. OT: was hat das mit OOP zu tun Grüße Klaus |
Re: OOP - Neuling braucht ein bisschen Hilfe
Mit OOP hat das glaub ich nicht wirklich was zu tun. Aber das Programm läuft schonmal, was positiv ist. Nun muss ich die anderen Units so basteln, dass das eingegebene auch angezeigt wird. Hierbei nochmal eine Frage: Wie zeig ich die Klassenbezeichnung im Memo an?
|
Re: OOP - Neuling braucht ein bisschen Hilfe
|
Re: OOP - Neuling braucht ein bisschen Hilfe
Ich hab wieder ein Problemchen, diesmal bei der Datenausgabe.
Ich hab in der Case-Anweisung die Motorbezeichnung gesetzt, jetzt will ich die auch ausgeben. Allerdings geht es nicht. Ich steh grad irgentwie voll aufm Schlauch :wall:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, unit2, unit3; type TForm1 = class(TForm) RadioGroup1: TRadioGroup; Memo1: TMemo; Ed_L_H: TEdit; Ed_Rw: TEdit; Ed_L_E: TEdit; Anlegen: TButton; procedure AnlegenClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; Auto: TFahrzeug; M_Leistung: string; M_Bezeichnung: string; implementation {$R *.dfm} procedure TForm1.AnlegenClick(Sender: TObject); begin case Radiogroup1.itemindex of 0: begin Bezeichnung := 'Verbrennungsmotor'; Memo1.lines.Add(M_Bezeichnung); end; 1 : begin M_Bezeichnung:= 'Elektromotor'; end; 2 : begin M_Bezeichnung:= 'Hybridantrieb'; end; 3 : begin M_Bezeichnung:= 'Wasserstoffantrieb'; end; end; end; end.
Delphi-Quellcode:
unit Unit2;
//Fahrzeug allgemein interface uses sysutils; Type TFahrzeug = class (TObject) private public constructor create (M_Bezeichnung: string; M_Leistung: string); function getleistung: string; function getMotorBezeichnung: string; virtual; //function getreichweite: integer; virtual; abstract; end; var Bezeichnung: string; Leistung: string; M_Leistung, M_Bezeichnung: string; implementation constructor TFahrzeug.create (M_Bezeichnung: string; M_Leistung: string); begin Bezeichnung := M_Bezeichnung ; M_Leistung :=Leistung ; end; function TFahrzeug.getleistung: string; begin result := Leistung ; end; function TFahrzeug.getMotorBezeichnung: string; begin result:= Bezeichnung; end; end. |
Re: OOP - Neuling braucht ein bisschen Hilfe
Delphi-Quellcode:
case Radiogroup1.itemindex of
0: begin Bezeichnung := 'Verbrennungsmotor'; end; 1 : begin M_Bezeichnung:= 'Elektromotor'; end; 2 : begin M_Bezeichnung:= 'Hybridantrieb'; end; 3 : begin M_Bezeichnung:= 'Wasserstoffantrieb'; end; else begin M_Bezeichnung:= '; end; if M_Bezeichnung <> '' then Memo1.lines.Add(M_Bezeichnung); end; |
Re: OOP - Neuling braucht ein bisschen Hilfe
Ich habs jetzt mal mit dieser Variante versucht:
Delphi-Quellcode:
procedure TForm1.AnlegenClick(Sender: TObject);
begin case Radiogroup1.itemindex of 0: begin Bezeichnung := 'Verbrennungsmotor'; Auto:=TFahrzeug.create(Radiogroup1.Items.GetText, Ed_L_H.Text); Memo1.lines.Add := Auto.getDaten; end;
Delphi-Quellcode:
Hier hab ich jetzt wieder das anfangsproblem. Inkompatible Typen und nicht genügend wirkliche Parameter bei der Zeile Memo1.lines.Add := Auto.getDaten;
constructor TFahrzeug.create (M_Bezeichnung: string; M_Leistung: string);
begin Bezeichnung := M_Bezeichnung ; Leistung :=M_Leistung ; end; ... function TFahrzeug.getDaten: string; begin result:= Bezeichnung + Leistung; end; Und ich hab grad echt ein Brett vorm Kopf (wohl eher ne Bohle) |
Re: OOP - Neuling braucht ein bisschen Hilfe
Guten Abend,
Zitat:
Zitat:
Delphi-Quellcode:
.. und gewöhn Dich mal an die Regel "eine Frage pro Thread"
begin
case Radiogroup1.itemindex of 0: begin Bezeichnung := 'Verbrennungsmotor'; Auto:=TFahrzeug.create(Radiogroup1.Items[RadioGroup1.ItemIndex], Ed_L_H.Text); // oder auch // Auto:=TFahrzeug.create(Bezeichnung, Ed_L_H.Text); // oder auch //Auto:=TFahrzeug.create(Radiogroup1.Items[0], Ed_L_H.Text); Memo1.lines.Add := Auto.getDaten; end; Grüße Klaus |
Re: OOP - Neuling braucht ein bisschen Hilfe
Vielen vielen Dank :thumb:
diese Variante hat mir geholfen: Auto:=TFahrzeug.create(Radiogroup1.Items[0], Ed_L_H.Text); Jetzt läuft alles. Die Ausgaben der Klasse und in ein Memo statt Edit bekomm ich auch noch irgentwie hin :) Lg Liam |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz