Erreurs, bugs, questions - page 1647

 
Alexey Navoykov:

Vous êtes sûr ?

et en même temps. Comment le savez-vous ? Si le premier est égal, le second le sera aussi.
Exemple pour les deux plateformes
// 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);    
}
Résultat
NormalizeDouble(Price1(=1.234566), 5) = 1.23457
NormalizeDouble(Price2(=1.234574), 5) = 1.23457
NormalizeDouble(Price2-Price1(=0.000008), 5) = 0.00001
 

Erreur de compilation

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:

Erreur de compilation

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:
Dans votre exemple, l'erreur est justifiée, mon cas est différent.
 
A100:
Dans votre exemple, l'erreur est justifiée, dans mon cas, c'est différent.

Je n'ai pas lu le code attentivement et j'ai automatiquement pensé que vous aviez une déclaration conditionnelle if, mais vous avez juste une fonction appelée f.

Vous devez transmettre une variable ou une valeur précalculée à la fonction, et non une expression.

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:

Vous devez passer une variable ou une valeur précalculée dans la fonction, pas une expression.

Quelle est la différence ?

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

Quelle est la différence ?

Dans le premier cas, une variable est passée, dans le second, le résultat de l'opération. Et qui sait ce qui est inventé là pour l'inta

En fait, cette erreur de référence est gênante depuis très longtemps, et elle ne devrait pas exister du tout.

 
A100:

Quelle est la différence ?

La différence est que dans le premier cas, il n'y a pas d'erreur :)
 

Il y a quelques suggestions à propos de la fonction ArrayResize. Nous devons ajouter la possibilité de définir le paramètrereserve_size à -1, ce qui signifierait utiliser la valeur définie précédemment. Ainsi,nous n'aurions pas besoin de stocker ou de transporter cette valeur. Il suffirait d'abord de redimensionner le tableau avec la réserve requise, puis de ne pas s'en soucier .Sinon, c'est un inconvénient constant, lorsque vous passez un tableau à une fonction, qui le redimensionne, mais ne sait rien de la réserve prédéfinie sur lui, et par conséquent l'épuise, conduisant à des réallocations de mémoire inutiles plus tard. Après tout, je suppose que cette valeur est stockée quelque part pour un tableau. Ou pas ?

 
Alexey Navoykov:
N'est-ce pas ainsi que fonctionne le 0 actuel ?