Fehler, Irrtümer, Fragen - Seite 1647

 
Vasiliy Sokolov:

Bitte erklären Sie das folgende Verhalten:

Ist er stabil und jederzeit oder beim ersten Tick des laufenden Indikators?

Der Wert _LastError fehlt im Fenster wotch

 
Alexey Navoykov:

Sind Sie sicher?

Wenn der erste gleich ist, ist auch der zweite gleich.
Beispiel für beide Plattformen
// MQL4&5-code

#ifdef __MQL5__
  #define show_inputs script_show_inputs
#endif

#property show_inputs
#property strict

sinput double Price1 = 1.234566;
sinput double Price2 = 1.234574;

void NormToConsole( const double Price, const int digits, const string Str )
{
  Print("NormalizeDouble(" + Str + "(=" + DoubleToString(Price, digits + 1) +
        "), " + (string)digits + ") = " + DoubleToString(NormalizeDouble(Price, digits), digits));
}

#define  NORM2CONSOLE(PRICE) NormToConsole(PRICE, 5, #PRICE);

void OnStart()
{  
  NORM2CONSOLE(Price1);
  NORM2CONSOLE(Price2);
  NORM2CONSOLE(Price2 - Price1);    
}
Ergebnis
NormalizeDouble(Price1(=1.234566), 5) = 1.23457
NormalizeDouble(Price2(=1.234574), 5) = 1.23457
NormalizeDouble(Price2-Price1(=0.000008), 5) = 0.00001
 

Kompilierungsfehler

void f( int& i ){ Print( i ); }
void OnStart()
{
        int a, b;
        f( a = 5 ); //error: '=' - parameter passed as reference, variable expected
        f( b = a ); //error: '=' - parameter passed as reference, variable expected
}
 
A100:

Kompilierungsfehler

void f( int& i ){ Print( i ); }
void OnStart()
{
        int a, b;
        f( a == 5 ); //error: '=' - parameter passed as reference, variable expected
        f( b == a ); //error: '=' - parameter passed as reference, variable expected
}
 
Vitalii Ananev:
In Ihrem Beispiel ist der Fehler berechtigt, in meinem Fall ist es anders
 
A100:
In Ihrem Beispiel ist der Fehler berechtigt, in meinem Fall ist es anders

Ich habe den Code nicht sorgfältig gelesen und dachte automatisch, dass Sie eine bedingte if-Anweisung haben, aber Sie haben nur eine Funktion namens f.

Sie sollten eine Variable oder einen vorberechneten Wert an die Funktion übergeben, keinen Ausdruck.

void f( int& i ){ Print( i ); }
void OnStart()
{
        int a = 5;
        int b = a;
        f(a); //error: '=' - parameter passed as reference, variable expected
        f(b); //error: '=' - parameter passed as reference, variable expected
}
 
Vitalii Ananev:

Sie müssen eine Variable oder einen vorberechneten Wert an die Funktion übergeben, keinen Ausdruck.

Worin besteht der Unterschied?

//1.mq5
         a = 5;
         f( a );
//2.mq5
         f( a = 5 );
 
A100:

Worin besteht der Unterschied?

Im ersten Fall wird eine Variable übergeben, im zweiten Fall das Ergebnis der Operation. Und wer weiß, was sich dort für inta

Tatsächlich ist dieser Verweisfehler schon seit langem ärgerlich, er sollte überhaupt nicht vorhanden sein.

 
A100:

Was ist der Unterschied?

Der Unterschied ist, dass im ersten Fall kein Fehler auftritt :)
 

Es gibt einige Vorschläge für die Funktion ArrayResize. Wir müssen die Möglichkeit hinzufügen, den Parameterreserve_size auf -1 zu setzen, was bedeuten würde, dass der zuvor eingestellte Wert verwendet wird. Dann müssten wir diesen Wert nicht speichern oder mit uns herumtragen. Es würde ausreichen, die Größe zunächst mit der erforderlichen Reserve zu ändern und sich dann nicht darum zu kümmern .Andernfalls ist es ein ständiges Ärgernis, wenn man ein Array an eine Funktion übergibt, die zwar die Größe ändert, aber nichts über die voreingestellte Reserve weiß und es deshalb ablaufen lässt, was später zu unnötigen Speicher-Neuzuweisungen führt. Immerhin ist dieser Wert für ein Array irgendwo gespeichert. Oder ist es nicht so?