Erreurs, bugs, questions - page 2295

 

Erreur pendant l'exécution

void Print( const int& ) { printf( "%s", __FUNCSIG__ ); }
void OnStart()
{
        const int i = 0;
              int j = 0;
        Print( i ); //(1)
        Print( j ); //(2)
}

Résultat 1 : void Print(const int&)
2 : 0

différent. Quelle est la différence ? Le même était attendu.

 
A100:

différent. Quelle est la différence ? Le même était attendu.

C'est pourquoi

void f( const int& ) { printf( "%s", __FUNCSIG__ ); }
void f( int& ) { printf( "%s", __FUNCSIG__ ); }
void OnStart()
{
        const int i = 0;
              int j = 0;
        f( i ); //(1)
        f( j ); //(2)
}
 
fxsaber:

Pour cette raison.

Quel est le lien avec mon exemple? Remplacez Print par Print2 et le résultat est le même !

Si vous ne comprenez pas, il découle de mon exemple que int i est censé ne pas convenir à Print( const int&)

 
A100:
Quel est le rapport avec mon exemple? Remplacez Print par Print2 et le résultat sera le même !

Connexion directe ! Deux signatures dans l'exemplaire original. L'un d'entre eux est standard.

En le remplaçant par Print2, on obtient une seule signature et il sera appelé deux fois.

 
fxsaber:

Connexion directe ! Deux signatures dans l'exemplaire original. L'un d'entre eux est le standard.

Et quelle est votre deuxième signature ici? C'est ça ?
void Print( int& )
 
A100:
Et quelle est la deuxième signature ici? C'est vraiment comme ça ?

Vous savez vous-même que Print est quelque chose d'inégalé dans MQL5 pour l'utilisateur. Je vous ai donné une explication. Si vous ne l'aimez pas, n'hésitez pas.

 
fxsaber:

Vous savez vous-même que Print est quelque chose d'inégalé dans MQL5 pour l'utilisateur. Je vous ai donné une explication. Si vous ne l'aimez pas, n'hésitez pas.

Ce n'est pas une explication car si (2) était standard, l'exemple suivant
#define  PRN             { printf( "%s", __FUNCSIG__ ); }
  void Print( const int& ) PRN //(1) //пользовательская
//void Print(       int& )     //(2) //якобы штатная
  void Print(       int& ) PRN //(3) //пользовательская
void OnStart()
{
        const int i = 0;
              int j = 0;
        Print( i );
        Print( j );
}
aurait généré une erreur à l'étape de la compilation : (2) et (3) sont en conflit. Mais tout se compile et s'exécute normalement. Et dans l'exemple initial, en l'absence de void Print(int&), c'est void Print( const int&) qui doit être appelé au lieu de l'habituel void Print(...).
 
A100:
Dans l'exemple initial, en l'absence de void Print(int&), void Print( const int&) devrait être appelé au lieu de l'habituel void Print(...).

Il ne devrait pas.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Bugs, bugs, questions

fxsaber, 2018.09.23 17:08

Vous savez vous-même que Print est quelque chose d'inégalé dans MQL5 pour l'utilisateur.

Je ne vois pas pourquoi vous devriez en faire un problème. L'impression par défaut a une signature étrange qui ne correspond pas aux capacités de MQL5.

 
fxsaber:

Ça ne devrait pas.

Je ne vois pas pourquoi cela devrait être un problème. L'impression intégrée a une signature d'enfer qui ne correspond pas aux capacités de MQL5.

Il n'y a pas de problème... ... il y a une erreur. Je ne comprends pas non plus pourquoi vous essayez de l'expliquer. L'impression par défaut a la signature suivante :

et est également capable d'entrer en conflit avec d'autres fonctions (si nécessaire)

 
A100:

Il n'y a pas de problème... il y a une erreur. Je ne comprends pas non plus pourquoi vous essayez de sortir l'explication de votre tête. L'impression par défaut a la signature suivante :

Et il peut également entrer en conflit avec d'autres fonctions (si nécessaire).

La signature d'impression est hors de portée du langage MQL5. Si MQL5 interdit totalement la surcharge d'impression, ce ne sera pas un bug.

J'espère que ce "bug" ne vous empêche pas de créer des TS et ne nécessite pas de béquilles d'écriture.