Erreurs, bugs, questions - page 2735

 
La recompilation d'une bibliothèque connectée au conseiller expert sélectionné dans le testeur ne la récupère pas lors de la prochaine exécution. Je dois sélectionner un autre conseiller expert dans le testeur, puis passer au précédent. Ce n'est qu'à ce moment-là que le testeur prend en charge la nouvelle bibliothèque. Bug complètement non évident.
 
Stanislav Korotky:
La recompilation de la bibliothèque connectée à l'Expert Advisor, qui est sélectionnée dans le testeur, ne conduit pas à sa reprise au prochain démarrage. Je dois sélectionner un autre conseiller expert dans le testeur, puis passer au précédent. Ce n'est qu'à ce moment-là que le testeur prend en charge la nouvelle bibliothèque. Bug complètement non évident.

C'est la même chose dans la version stable...

 
Bug MT5 (build 2407) erreur de compilation lorsque la classe contient un pointeur vers une classe wrapper qui utilise cette classe comme champ.
C++ en ligne : https://onlinegdb.com/SJN1shM58
template<typename T>
class wrapper{
public:
   T data;
};

class B{
public:
   wrapper<B>* ptr;             // undefined class 'B' cannot be used
};


void OnStart(){  
   B b;
   b.ptr = new wrapper<B>();
   printf("%p", b.ptr);
} 
 
Une erreur de compilation :
int i = f(); //Error: 'f' - undeclared identifier
void OnStart()
{
}
int f() { return 0; }

mais autrement :

void OnStart()
{
int i = f(); //нормально
}
int f() { return 0; }

bien. Quelle différence cela fait-il ?

 
A100:
C'est une erreur de compilation :

mais de cette façon :

c'est ainsi que vous devez écrire votre premier exemple - avec une description directe, d'ailleurs une description directe pour les structures et les classes fonctionne aussi

int f(int);
int i = f(5);
void OnStart()
{
   printf("i = %i", i);
}
//+------------------------------------------------------------------+
int f(int v)
{
   return v * v;
}
//+------------------------------------------------------------------+

2020.05.10 17:23:27.704 tst1 (ETHUSD,M1) i = 25

A100:

ok. Quelle est la différence ?

Je pense que le compilateur analyse le compilateur de haut en bas et à la fin, OnStart() sera analysé en dernier.
 
Igor Makanu:
Je pense que le compilateur analyse le compilateur de haut en bas et que OnStart() sera analysé en dernier.

Dans ce cas, il n'est pas nécessaire de réfléchir - les règles doivent être générales : si une fonction peut être appliquée avant la déclaration, alors elle le peut, sinon, elle ne le peut pas. Par conséquent, les deux cas doivent être compilés ou non.

 
A100:

Dans ce cas, il n'est pas nécessaire de réfléchir - les règles doivent être générales : si une fonction peut être appliquée avant la déclaration, alors elle le peut, sinon, elle ne le peut pas. Par conséquent, les deux cas doivent être compilés ou non.

hélas, cela s'appelle une fonctionnalité du langage, vous pouvez l'écrire de cette façon

int f(int v)
{
   return v * v;
}
void OnStart()
{
   printf("i = %i", i);
}
//+------------------------------------------------------------------+
int i = f(5);
 
Igor Makanu:

Hélas, ce sont des particularités de la langue, vous pouvez l'écrire ainsi.

Toutes les particularités sont reflétées dans la documentation. Je n'ai pas vu celui-ci là-bas. D'où la conclusion : ce n'est pas une caractéristique, mais un défaut.

 
A100:

Dans ce cas, il n'est pas nécessaire de réfléchir - les règles doivent être générales : si une fonction peut être appliquée avant la déclaration, alors elle le peut, sinon, elle ne le peut pas. Par conséquent, les deux cas doivent être compilés ou non.

C'est le comportement normal du C de ces langages.

Sans une déclaration de fonction directe, ils ne peuvent pas être utilisés. Un appel depuis OnStart compile en fait plus tard qu'un appel direct au niveau global.

En C++, la même erreur sera générée.

 
Renat Fatkhullin:

En C++, l'erreur sera exactement la même.

En C++, il y a une erreur dans les deux cas, bien qu'ils auraient pu retarder la compilation là aussi, mais ils ne l'ont pas fait, préférant la règle simple selon laquelle la fonction doit être déclarée avant d'être utilisée.

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2020.05.07
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы