Klassenübergreifende Variablen - Seite 2

 
Globale Variablen sind überall sichtbar. Wenn das intendiert ist, darf so eine Variable nicht in einer Klasse definiert werden, sondern muss halt eine globale werden/sein.
 
Marius May:

Jetzt ist mir auch noch aufgefallen das ich die input-variablen nicht in den anderen Klassen verwenden kann. Mir fällt auch echt kein Ansatz ein. 


Die InputVariablen kannst du doch aber im Konstruktor den Klassen mitgeben.

Machst am besten gleich ein eigenes Objekt "Input" und das reichst du den Klassen, die es brauchen mit durch.

 
Christian:

Die InputVariablen kannst du doch aber im Konstruktor den Klassen mitgeben.

Machst am besten gleich ein eigenes Objekt "Input" und das reichst du den Klassen, die es brauchen mit durch.

Das hat einen schwerwiegenden Haken!

Der Konstruktor wird nur ein EINZIGES mal aufgerufen! Ich bin da erst vor kuzem draufgekommen und schreibe einiges um.

Wenn du Parameter des laufenden EAs anpassen möchtes (durch Doppelclick auf das EA-Symbol im Chart) wird der Destruktor und Konstruktor der Instanz NICHT aufgerufen.

Die Konstruktoren der Klassen sind nur geignet für Einstellungen die unveränderbar sind.

Ich hab das in den letzten Tagen ausgiebig getestet, da das ja so wie so niemand beantworten hätte können.

Im Hauptprogramm spielt erstens einmal die Reihenfolge der #include <xxx.mqh> eine Rolle.

Jede #include kann ihre eigene unikaten inputvariablen definieren !!!

Und die Klassen sollten, falls erforderlich, ihre eigenen OnInit() bzw. OnDeinit() funktionen definieren, die vom Hauptprogramm in der OnInit() bzw. OnDeinit() aufgerufen werden.

So wird das auch bei Panelen gehandhabt.

Ist schon etwas höhere MQL-Mathematik und der Einsteiger wird es nicht gleich verstehen was ich hier meine, und es ist eigentlich ein 'workaround', wie so vieles hier.

Falls ich Zeit finde stell ich da mal was in die Codebase.

 
Otto Pauser:

Das hat einen schwerwiegenden Haken!

Der Konstruktor wird nur ein EINZIGES mal aufgerufen! Ich bin da erst vor kuzem draufgekommen und schreibe einiges um.


Startet der EA nicht neu wenn man die INPUT-Variablen Ändert ? Habe lange nichts mehr mit MQL5 gemacht.

Das wäre echt nen dickes Ei von MQ aber reiht sich ein in den Flickenteppich.


Kannst noch kurz was zu meinem anderen Beitrag mit dem Pointer sagen.

Ich meine das habe ich auch schon in MQL5 gemacht...ist aber schon etwas her.

 
Otto Pauser:

Das hat einen schwerwiegenden Haken!

Der Konstruktor wird nur ein EINZIGES mal aufgerufen! Ich bin da erst vor kuzem draufgekommen und schreibe einiges um.

Wenn du Parameter des laufenden EAs anpassen möchtes (durch Doppelclick auf das EA-Symbol im Chart) wird der Destruktor und Konstruktor der Instanz NICHT aufgerufen.

Also das ist kein schwerwiegender Fehler, das ist doch so geplant!

Der Konstruktor erstellt den Speicherbereich und  man kann einiges der Initialisierung dort unterbringen - aber er ist nicht(!) der Ort für laufende Berechnungen!

Daher muss man sich überlegen, welche Werte bleiben unverändert (Konstruktor) und welche nicht, für die müsste man dann eigene Methoden zum Setzen und Berechnen schreiben.

Es ist auch nicht ganz richtig mit dem Neustart. Wenn ein normaler EA (zB. ohne OOP) läuft und Du änderst die die Eingabeparameter im Code und auf Neu-Kompilieren drückst passiert mit dem EA auf dem Chart nichts. Dazu musst Du die Eingabeparameter im Setup-Fenster des EA auf dem Chart ändern.

Ähnlich ist das beim Debuggen (nervt wirklich). Da werden die Eingabeparameter erst durch Änderungen im Tab Eingaben des Testers geändert.

 

Und ich dachte ich habe Plan von MQL5... Mal sehen ob ich es hinbekomme. Wenn nicht schreibe ich halt alle Parameter in Textdateien und lasse sie vom Programm auslesen. Das mach ich eh schon mit der Hälfte aller Werte.

Auf jeden Fall erstmal danke an euch 3!


-Ich habe für die Input variablen einfach ein extra file erstellt und frage die dann immer von dem ab. Mal sehen ob es klappt..

 
Marius May :

Guten Tag,

Ich baue mein Projekt derzeit um, da es zu groß für eine Datei geworden ist. Das klappt auch so weit gut. Ich bekomme es bloß nicht hin Variablen Klassen übergreifend ab zu fragen. Z.b. möchte ich in einer Nebenklasse Variablen aus meiner Hauptklasse abfragen. Habe aber keine Ahnung wie.

-Danke im Vorraus.

Wenn ich Sie gut verstehe und auf die Variablen Ihrer Hauptklasse in einer Unterklasse (einer abgeleiteten Klasse) zugreifen möchte, müssen Sie sie nur im Abschnitt "Geschützt" festlegen.
Grund der Beschwerde: