Fehler, Irrtümer, Fragen - Seite 2074

 

Wenn Sie den Indikator im unteren Fenster verwenden, funktioniert die automatische Skalierung nicht korrekt.

Wenn zwei Puffer im Datenfenster benötigt werden, aber nur der erste Puffer am Zeichnen teilnimmt und der zweite Puffer den Typ "DRAW_NONE" hat - ohne Zeichnen wird die Skalierung vom zweiten Puffer durchgeführt (die Werte des zweiten Puffers sind größer als die des ersten), obwohl die Skalierung nicht von ihm durchgeführt werden sollte (Typ "DRAW_NONE").

Der erste Puffer ist auf 6 Dezimalstellen genau (z. B. 0,0001249 AC-Anzeige). Der zweite Puffer enthält die Werte -2, -1,0,1,2 (analog - nein, undefiniert, ja, usw.)

 
SEM:

Wenn Sie den Indikator im unteren Fenster verwenden, funktioniert die automatische Skalierung nicht korrekt.

Wenn zwei Puffer im Datenfenster benötigt werden, aber nur der erste Puffer am Zeichnen teilnimmt und der zweite Puffer den Typ "DRAW_NONE" hat - ohne Zeichnen wird die Skalierung vom zweiten Puffer durchgeführt (die Werte des zweiten Puffers sind größer als die des ersten), obwohl die Skalierung nicht von ihm durchgeführt werden sollte (Typ "DRAW_NONE").

Der erste Puffer ist auf 6 Dezimalstellen genau (z. B. 0,0001249 AC-Anzeige). Der zweite Puffer enthält die Werte -2, -1,0,1,2 (analog - nein, undefiniert, ja, usw.)

Wird im neuen Build behoben.
 

Warum ist der Compiler stumm?

enum   ENUM_FILTER      {off,zero,model,main,fast,slow,upper,lower};

void OnStart()
{

double zero=5;//Почему компилятор молчит?
int d=(ENUM_FILTER)model;
int e=(ENUM_FILTER)zero;
Print("d=",d," zero=",zero," e=",e);
}

2017.11.23 16:16:53.518 test EURCHF,H1: d=2 zero=5.0 e=5


Haben wir nicht bei der Deklaration der Aufzählung benannte Konstanten erstellt und hat der Name "zero"=1 nicht die globale Ebene besetzt?
 
Kirill Belousov:

Warum ist der Compiler stumm?

Aus demselben Grund.

enum ENUM {i = 5};

void OnStart()
{
  int i = i + 1;
  
  Print(i);   // 6
  Print(::i); // 5
}
Verwendung ::.
 
fxsaber:

Aus demselben Grund.

Verwendung ::.

Ich danke Ihnen.

Das :: enum funktioniert. Und es funktioniert auch, wenn die Aufzählung innerhalb von OnStart() angegeben wird

Es ist nur so, dass es verständlich wäre, wenn es eine Funktion wäre. Sie wird auch in der Hilfe beschrieben.

Aber Null ist hier eine initialisierte Konstante. Ich dachte, das seien verschiedene Dinge.

Deshalb habe ich gefragt, warum der Compiler keine Warnung ausgibt, dass der Nullname bereits im globalen Kontext verwendet wird.

Wo steht das in der Hilfe? Oder ist sie undokumentiert?

 
Kirill Belousov:

Warum erzeugt der Compiler keine Warnung, dass die Null bereits in einem globalen Kontext verwendet wird?

Fehler. Wenn es sich nicht um eine Aufzählung, sondern um eine Variable handeln würde, würde die Meldung "declaration of 'xxx' hides global declaration at line yyy" erscheinen. Schreiben Sie auf die SD-Karte.

MQL5(4)-вопрос. Точка входа.
MQL5(4)-вопрос. Точка входа.
  • 2017.04.23
  • www.mql5.com
Всем привет. Приступил к изучению языка MQL5. Пока только прочитал "Основы языка" из документации...
 
Alexey Kozitsyn:
Wird mit dem neuen Build behoben.
Vielen Dank für die Informationen!
 
fxsaber:

Schwachstelle. Wenn es sich nicht um eine Aufzählung, sondern um eine Variable handeln würde, würde die Meldung "declaration of 'xxx' hides global declaration at line yyy" ausgegeben. Schreiben Sie auf die SD-Karte.

Ich habe es in SD geschrieben.

Und wenn wir den Fall betrachten, dass enum innerhalb von OnStart() ist.

Es wird auch keine Warnung ausgegeben.

Was hat das mit dem Kontext zu tun? Hier geschieht alles innerhalb einer Funktion...

Es stellt sich heraus, dass die Konstantennamen aus enum gar nicht auf ihre Belegung geprüft werden. Sie werden im Code vor den Prüfungen ersetzt. Sieht es so aus?
 
Kirill Belousov:

Der SD hat geschrieben.

Und wenn wir den Fall von enum innerhalb von OnStart() betrachten.

Es wird auch keine Warnmeldung ausgegeben.

Was hat das mit dem Kontext zu tun? Hier geschieht alles innerhalb einer Funktion.

Es stellt sich heraus, dass Konstantennamen aus enum nicht daraufhin geprüft werden, ob sie überhaupt belegt sind. Sie werden im Code vor den Prüfungen ersetzt. Sieht es so aus?

Sie haben es bereits in SD geschrieben.

 

Ich schreibe gerade einen EA,
wenn ich die Optimierung in MT5 aktiviert habe, erhalte ich wiederholt den blauen Bildschirm W10x64 b1653
hat vielleicht jemand mit diesem Phänomen zu tun?
Was ist der Grund dafür?