hier die zweite Möglichkeit
es stellt sich heraus, dass die Variablen nach der ersten Zuweisung auf denselben Speicherplatz zeigen
if(firsttime) { backup = StringVal;
Ich würde gerne wissen, von welchem Build dies stammt
Hier ein Beispiel
extern string StringVal = "string"; string backup = ""; bool firsttime = true; int init() { Print("========================="); Print("StringVal=",StringVal," backup=",backup); if(StringVal != backup){ if(firsttime) { backup = StringVal; Print(" First Call ===> backup = StringVal"); } Print("StringVal=",StringVal,"< > backup=",backup); } firsttime = false; } int start() { }
wenn ich als Experte kompiliere
Wenn ich dann den StringVal ändere, ändert sich die Sicherung sofort
und der letzte Druck wird nicht als
Wo liegt das Problem?
Nun, Sie ändern den StringVal manuell und der Init funktioniert sofort, das ist richtig ...
es ist klar, dass init() funktioniert
Das Problem ist, dass 2. die Variable unabhängig von anderen Bedingungen aktualisiert wird
Es gibt keine Aktualisierungsbedingung - aber die Aktualisierung findet statt!
Ja, es ist alles klar
Das Problem ist, dass 2. die Variable unabhängig von anderen Bedingungen gesetzt wird
IMMER
GROSSES PROBLEM
Hier ein ähnliches Beispiel
der Wert der ersten Variablen wird nur einmal an die zweite Variable übergeben, und der Wert der zweiten Variablen sollte sich bei der weiteren Ausführung des Programms nicht ändern
aber jedes Mal, wenn die erste Variable geändert wird, ändert sich auch der Wert der zweiten Variable, was nicht sein sollte
extern string Value = "O"; string temp_=""; bool firsttime=true; int start() { string txt=StringConcatenate( " Value: ",Value,"\n", " temp_: ",temp_,"\n", " firsttime: ",firsttime); if(firsttime) { temp_=Value; firsttime=false; } // значение присваевается тольо ОДИН раз Print(txt); Comment(txt); }
Hier ein ähnliches Beispiel
der Wert der ersten Variablen wird nur einmal an die zweite Variable übergeben, und der Wert der zweiten Variablen sollte sich bei der weiteren Ausführung des Programms nicht ändern
aber jedes Mal, wenn die erste Variable geändert wird, ändert sich der Wert der zweiten Variable, was nicht sein sollte
Wenn eine externe Variable geändert wird, wird EA neu gestartet, was zur Initialisierung von Variablen führt, die auf globaler Ebene deklariert sind. Das ist richtig. Wenn Sie dies vermeiden wollen, verwenden Sie globale Variablen.
falsch - überhaupt keine Initialisierung
Hier ist ein Beweis aus der Hilfe
Globale Variablen werden nur einmal initialisiert, gleich nachdem das Programm in den Speicher des Client-Terminals geladen wurde.
Und im Allgemeinen geht es nicht um die Initialisierung, sondern um die Änderung von Variablen
Bitte lesen Sie den Code sorgfältig
Und das Problem tritt nur bei Variablen vom Typ string auf
Bei anderen Typen kein Problem!
hier die zweite Möglichkeit
es stellt sich heraus, dass die Variablen nach der ersten Zuweisung auf denselben Speicherplatz zeigen
Ich würde gerne wissen, von welchem Build dies stammt
Hier ein Beispiel
Sie haben immer den StringVal != backup und firsttime wird immer wahr sein, weil es (init) nur einmal gestartet wird , aber jedes Mal, wenn Sie den EA neu starten und ein neues gestartet wird, wenn Sie Info-Fenster ändern oder wenn Sie Set auf Terminal Start ändern. Wenn Sie alsoStringVal ändern , starten Sie das Init erneut.

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn ich als Experte kompiliere
Wenn ich dann den StringVal ändere, ändert sich die Sicherung sofort
und der letzte Druck wird nicht als
Wo liegt das Problem?