Apprendre et écrire ensemble en MQL5 - page 33

 

Nous devons déplacer l'initialisation vers la liste d'initialisation.

Seules les constantes statiques intégrales peuvent être initialisées dans la déclaration (au moins en C++, je ne sais pas encore en MQL5 :) ).

 
Une autre question, la dernière. Quelle est la raison pour laquelle "" et NULL ne sont pas équivalents pour les chaînes de caractères ?
 
Interesting:

En parlant d'oiseaux.

Et que répondra le compilateur à cette question ? Et il répondra aux questions suivantes '=' - utilisation illégale de l'affectation

Le compilateur ne s'est pas laissé abattre - '=' - utilisation d'une affectation illégale.

J'ai une question : que se passera-t-il si le programmeur (dans ce cas, moi) n'initialise pas les variables avant de les utiliser (il/elle fait ce que le compilateur exige et omet ce moment dans le constructeur) ?


La bonne façon d'initialiser les membres des structures/classes dans le(s) constructeur(s) :

//Struct StrMQL4_Deal
struct StrMQL4_Deal
{
//----------------------------------------------------------------------------//
double TP;
double SL;
//----------------------------------------------------------------------------//
StrMQL4_Deal():TP(0),SL(0) { }
StrMQL4_Deal(double  tp,double  sl):TP(tp),SL(sl) { }
};
 
TheXpert:
Une autre question, la dernière. Quelle est la raison pour laquelle "" et NULL ne sont pas équivalents pour les chaînes de caractères ?
NULL signifie que la chaîne n'est pas allouée et "" que la chaîne est allouée et a une valeur.
 
mql5:

initialiser correctement les membres de la structure/classe dans le(s) constructeur(s) :

Oui, je m'en suis rendu compte il y a plus d'un an, du moins depuis 2010.
 
Interesting:
Oui, j'ai compris ça il y a plus d'un an, au moins depuis 2010, je fais comme ça.

Vous ne pouviez pas le faire correctement depuis 2010, car la liste d'initialisation a été introduite assez récemment :) .

mql5:

NULL signifie que la chaîne n'est pas allouée et "" que la chaîne est allouée et a une valeur.

OK, je vais le dire autrement. Quel est l'intérêt de saisir l'état de la chaîne "non distribué" pour l'utilisateur ? Peut-on l'utiliser de manière utile ou est-ce juste une béquille ?
 
TheXpert:
Vous n'avez pas pu le faire correctement depuis 2010, car la liste d'initialisation n'a été introduite que récemment :) .
dans le constructeur.
 
TheXpert:

Vous n'avez pas pu le faire correctement depuis 2010, car la liste d'initialisation a été introduite assez récemment :) .


Je voulais dire l'initialisation dans le constructeur de la classe et la déclaration comme

//----------------------------------------------------------------------------//
double TP;
double SL;
//----------------------------------------------------------------------------//
Je ne me souviens pas exactement, mais j'ai commencé à travailler avec des objets au début de l'année 2010 (premier trimestre, je ne peux pas dire exactement ; et c'est fastidieux de chercher les sources). Avant cela, je m'occupais de bibliothèques et j'étudiais les bases de MQL5 (ou plutôt, je m'occupais des problèmes de migration vers MQL5).
 
Rosh:
Faites une fonction de surcharge sur différents types de données dans le tableau.
Oups, je l'ai. Il n'y a donc pas de méthode universelle. La question s'est posée parce que la surcharge donne lieu à des fonctions identiques avec une seule ( !) différence - dans l'en-tête de la fonction, lorsque vous devez spécifier un type de tableau. Pas vraiment soigné, mais que puis-je faire, je vais le laisser comme ça. J'espérais qu'il y avait un moyen de s'en sortir, comme dans le manuel de référence.
 

Un simple script comme celui-ci me donne des résultats étranges

void OnStart()
  {
   for(uchar u=120;u<136;u++)
     {
       switch(u>254)
        {
          case  true: Print(u,">254 - true");  break;
          case false: Print(u,">254 - false"); break;
        }
     }
  }

Peut-être que quelqu'un peut expliquer la raison ? Lorsque le nombre 254 est explicitement converti en uchar, cela fonctionne comme prévu.

Raison: