EAccessViolation
-
Taschenrechner : TForm1
Ein Taschenrechner ist doch kein Formular
-
junix schrieb:
Äh, du bist dir bewusst, dass du keine Instanz von Taschenrechner erstellt, sondern nur einen Zeiger deklariert hast?
-junix
Aha, hmm ne war mir nicht klar.
Habe in der Borland-Hilfe nun nachgelesen, daß man mit dem new Operator eine Instanz erzeugen muß.Rechner1 = new Taschenrechner;
Ergibt aber eine Fehlermeldung: Typname erwartet
Hab keine Ahnung wie das gehen soll.
-
Taschenrechner *Rechner1 = new Taschenrechner();
-
Hmm... und sollte der Konstruktor nicht den selben Namen wie die Klasse selbst haben? Oder hab' ich da nicht aufgepasst?
-
Das ist ebenfalls richtig. Ich habe das Gefühl hier sollte jemand mal ein C++-Tutorial lesen.
-junix
-
Danke für die Hinweise, es läuft jetzt.
Warum muss eigentlich der new-Operator benutzt werden ?
Ich dachte man kann auch
Taschenrechner Rechner1;
schreiben.
Klappte aber nicht. Irgendein VCL-Problem. In meinem C++ Grundlagenbuch steht nicht das new
benutzt werden muss. Es wird nur als weitere Möglichkeit genannt.Dasd schrieb:
Hmm... und sollte der Konstruktor nicht den selben Namen wie die Klasse selbst haben? Oder hab' ich da nicht aufgepasst?
Upps, ich dachte nicht das es schlimm ist. Hab ich aber geändert.
Naja jedenfalls klappts jetzt.
Danke
Gruß
Stefan
-
Hi,
class Taschenrechner : TForm1 {
VCL- Klassen können nicht auf dem Stack erstellt werden sondern müssen immer im Heap erzeugt werden.
Warum das so ist wusste ich auch schon mal. tja, das Bier...soviel zu der Begründung deiner Frage
Warum muss eigentlich der new-Operator benutzt werden ?
Ein Taschenrechner von einem Formular abzuleiten ist eine denkbar Schlechte Idee.
Stell dir mal vor, auch wenn es bestimmt nicht vorhast, das du nun dein Taschenrechner auf DOS und auf Linux benutzen möchtest. Hups, nun hast du ein Problem. Es geht nämlich nicht mehr, da ein Formular der Klasse TForm nicht unter Linux oder DOS funktioniert. Dein Problem bei deiner Lösungsumsetzung ist also, das du die Visualisierung mit der Logik vermischt. Dieses ist in der Anwendungsentwicklung ein großes Problem und sollte generell verhindert werden.Um sowas zu verhindern gibt es Vorgehensweisen (Frameworks) die sowas sicher handhaben.
In deinem Fall hast du mit zwei Schichten zu tun.
1. Dein Tachenrechner
2. Die Visualisierung auf ein FormularDieses lässt sich in ein MVC- Modell abbilden. Dabie ist Das Model bei dir nicht vorhanden, da du keine Daten hast. Der Controler ist dein Taschenrechner und dein VIEW- Part ist dein Formular.
Und schon hast du eine saubere Trennung....
zum C++- Lernen ist der BCB nur schwer geeignet. Fange am besten im BCB mit Konsolenanwendungen an, damit du die Basistechniken erlernst. Du gewöhnst dir sonst nur Methoden an, die du dir später nur schwer abgewöhnen kannst...
-
AndreasW schrieb:
Ein Taschenrechner von einem Formular abzuleiten ist eine denkbar Schlechte Idee.
Habe ich nur gemacht, weil ich ja mit meinen Taschenrechner Methoden auf u.a. das Form1->Edit1 zugreifen will.
Hmm, war aber am einfachsten - fand ich jedenfalls. Ich wüsste aber auch keine andere Lösung.
-
Hi,
Falscher Ansatz. Nicht der Taschenrechner muss herausbekommen, was der User rechnen will, sondern die VIEW- Klasse ( das Formular). Der User tritt nur mir dem Formular in Kontakt. Das Formular fragt den Taschenrechner nach einem Ergebnis.
du schreibst eine Klasse Taschenrechner und implementierst eine Methode:
bool Taschenrechner::rechne(String MathString) { }
-
Vielleicht liest du dir auch mal diesen Artikel hier durch: Tut zu Doc/View
Er ist allerdings noch nicht fertig, aber die Grundprinzipien der Datentrennung sind darin ebenfalls festgehalten. Statt eines Dokuments bräuchtest du hald eben die von Andreas angesprochene Controller-Klasse. Das wiederum ist ja nichts weiter als Definitionssache (o:
Wie gesagt, es ist nicht die endgültige Form und es wird noch vieles daran geändert werden. (für Kritik wär ich allenfalls dankbar (o; ) Wenn du fragen dazu hast, kannst du sie selbstverständlich stellen (o:
Ist für einen Anfänger vielleicht etwas starker Tobak, aber lass dich davon nicht entmutigen. Stell ruhig deine Fragen. Je eher du dich mit sog. "professionellen" Lösungsansetzen rumschlägst desto schneller machst du Fortschritte (o:
-junix