Fehler, Irrtümer, Fragen - Seite 325

 
AlexSTAL:
Verdammt... Das Terminal kommt mit so vielen Beispielen... ...so viele Beispiele... Skript SymbolInfoSample.mq5, zum Beispiel
Manchmal reicht es aus, neue Konzepte zu Beginn zu definieren. Und erst dann prüfen Sie die Beispiele der Programme.
 
Wie erhalte ich den vollständigen Pfad zur Include-Datei?


Es gibt zwei Funktionen

__FILE__ - es gibt nur den Dateinamen

MQL5_PROGRAM_PATH - gibt den Pfad zur resultierenden ex5-Dateian


Frage: Woher weiß ich, wo in der mqh-Datei sie sich befindet?

 
In MetaEditor öffnet die Schaltfläche "Liste der Funktionen in der Datei" die Liste. Wenn Sie nach unten blättern, endet sie bei P und bewegt sich nicht weiter (das nach unten zeigende schwarze Dreieck wird inaktiv), obwohl es auch bei R Klassen gibt. Bitte reparieren Sie das.
 
-Alexey-:
In MetaEditor öffnet die Schaltfläche "Liste der Funktionen in der Datei" die Liste. Wenn Sie nach unten blättern, endet sie bei P und bewegt sich nicht weiter (das nach unten zeigende schwarze Dreieck wird inaktiv), obwohl es auch Klassen mit dem Buchstaben R gibt. Bitte korrigieren.

Und wie groß ist die Liste mindestens ungefähr? Vielleicht gibt es eine Grenze für die Größe der Liste...
 

Ich weiß nicht, ob es ein Fehler ist oder ob ich einen Trick gefunden habe. Der folgende Code funktioniert, gibt aber eine Warnung aus Ausdruck ist nicht boolesch

void OnStart()
  {
//---
   int a=3;
   int b=3;
   int c=3;
//---   
   if(a=b=c=3)Alert("a=b=c=3");
   else Alert("Условие не верно");
//---
  }
 
sergey1294:

Ich weiß nicht, ob das ein Fehler oder ein Trick ist. Der folgende Code funktioniert, erzeugt aber eine Warnung, dass der Ausdruck nicht boolesch ist



Warum sollte der Code nicht funktionieren?

Das einzige Problem ist, dass der if-Operand nicht in ein bool umgewandelt wird, wovor der Compiler warnt, aber ansonsten ist alles korrekt.

a,b,c können übrigens gar nicht initialisiert werden, da sie im if explizit zugewiesen werden.

3 a zuweisen, a zu b zuweisen, b zu c zuweisen und dann prüfen, ob es wahr ist und dann Print() schreiben.

Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Предупреждения компилятора
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Предупреждения компилятора
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Предупреждения компилятора - Документация по MQL5
 
sergey1294:

Ich weiß nicht, ob es ein Fehler ist oder ob ich einen Trick gefunden habe. Der folgende Code funktioniert, gibt aber eine Warnung aus Ausdruck ist nicht boolesch


Wahrscheinlich ist es so.

void OnStart()
{
//----------------------------------------------------------------------------//
//Work variables
int a=3;
int b=3;
int c=3;
//----------------------------------------------------------------------------//
  if(a&&b&&c==3)Alert("a=b=c=3");
  else Alert("Условие не верно");
//----------------------------------------------------------------------------//
}
 

Dann sagen Sie mir, wie ich diesen Ausdruck so schreiben soll, dass er nicht schimpft.

void OnStart()
  {
//---
   int a=1;
   int b=2;
   int c=3;
//---   
   if(a<b<c)Alert("a<b<c");
   else Alert("Условие не верно");
//---
  }
 
sergey1294:

Dann sagen Sie mir, wie ich diesen Ausdruck schreiben muss, damit er nicht schimpft.


if(a<b&&b<c){Print("");}

Im ersten Beitrag führen Sie Zuweisungsvorgänge durch, eine mehrfache Kaskadenzuweisung ist akzeptabel. Hier versuchen Sie, einen Mehrfachvergleich durchzuführen.

SZ, da Sie zwei Vergleichsergebnisse in Ihrer Ausgabe haben, sollten diese durch && oder einen anderen booleschen Operator getrennt werden.

 
sergey1294:

Dann sagen Sie mir, wie ich diesen Ausdruck so schreiben soll, dass er nicht schimpft.


Ich schlage Folgendes vor.

//----------------------------------------------------------------------------//
//Work variables
int a=1;
int b=2;
int c=3;
//----------------------------------------------------------------------------//
  if(a<b&&b<c)Alert("a<b<c");
  else Alert("Условие не верно");
//----------------------------------------------------------------------------//

Nikolay ist Ihnen voraus :)

Urain:

SZY da Sie zwei Vergleichsergebnisse in Ihrer Ausgabe haben, sollten sie durch && oder einen anderen booleschen Operator getrennt werden.

In diesem Fall nur &&.