Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1098

 
Grigori.S.B:

Veuillez me dire pourquoi le compilateur génère un avertissement dans le code du script de test MQL4 suivant :

Un avertissement à la ligne 27 sur la non-concordance des types de données. Les deux variables ont le même type int. Vous trouverez ci-dessous une capture d'écran de la compilation du script.

Si je remplace la ligne 27 par

l'avertissement n'apparaît pas.

Quelle est l'astuce ?

Il n'y a pas d'astuce. La variable t est déclarée comme double

En fait, ce t ne prend aucune signification nulle part.

 
Alexey Viktorov:

Et il n'y a pas d'astuce. La variable t est déclarée comme double

Merci beaucoup, je travaille dur - il est temps de se reposer.

Alexey Viktorov:

En fait, ce t ne prend aucune valeur nulle part.

Il s'agit d'une variable tampon utilisée pour stocker temporairement le résultat pendant le tri.

 

En quoi ces méthodes d'initialisation sont-elles différentes ?

class Klas{};
Klas *Klas_
Klas Klas_
 
Seric29:
1. class Klas{};
2. Klas *Klas_
3. Klas Klas_

1. type (classe) description

2. déclaration du pointeur de type (classe)

3. déclaration de l'instance de la classe - c'est l'initialisation, car le constructeur Klas() sera appelé s'il n'est pas décrit, alors le constructeur par défaut sera appelé - aide

Seric29:

En quoi ces méthodes d'initialisation sont-elles différentes ?

c'est-à-dire l'étape d'initialisation seulement 3.

 
Igor Makanu:

1. type (classe) description

2. déclaration du pointeur de type (classe)

3. déclaration de l'instance de la classe - c'est l'initialisation, car le constructeur Klas() sera appelé s'il n'est pas décrit, alors le constructeur par défaut sera appelé - aide

c'est-à-dire que seule la clause 3 est initialisée.

Je n'ai pas vu comment les initialiser dans l'aide, peut-être que j'ai juste regardé et que je n'ai pas compris, puisque les classes sont mal décrites dans l'aide - je l'ai lu 30 fois.

Oui, effectivement après le cours car je n'ai pas d'entrées mais ils ont mis ce code dans OnStart

   CFoo foo1(TimeCurrent());     // явный вызов параметрического конструктора 
   CFoo foo2();                  // явный вызов параметрического конструктора с параметром по умолчанию 
   CFoo foo3=D'2009.09.09';      // неявный вызов параметрического конструктора 
   CFoo foo40(foo1);             // явный вызов конструктора копирования 
   CFoo foo41=foo1;              // неявный вызов конструктора копирования 
   CFoo foo5;                    // явный вызов конструктора по умолчанию (если конструктор по умолчанию отсутствует, 
                                 // то вызывается параметрический конструктор с параметром по умолчанию) 
//--- допустимые варианты получения указателей CFoo 
   CFoo *pfoo6=new CFoo();       // динамическое создание объекта и получение указателя на него 
   CFoo *pfoo7=new CFoo(TimeCurrent());// ещё один вариант динамического создания объекта 
   CFoo *pfoo8=GetPointer(foo1); // теперь pfoo8 указывает на объект foo1 

Comprenez-le comme vous voulez. Je ne sais pas pourquoi tu dois l'expliquer de cette façon.

CFoo *pfoo6=new CFoo();       // динамическое создание объекта и получение указателя на него

Je ne comprends pas pourquoi j'ai besoin de ce pointeur.

CFoo *pfoo7=new CFoo(TimeCurrent());// ещё один вариант динамического создания объекта 

Et à quoi ça sert ? À ce que tu veux et ce que tu penses que ça signifie.

CFoo foo3=D'2009.09.09';      // неявный вызов параметрического конструктора

Je ne comprends pas non plus ce que cela signifie.

CFoo foo40(foo1);             // явный вызов конструктора копирования 
La finalité de cette mesure n'est pas claire non plus. Ils ne l'auraient pas téléchargé, mais auraient écrit l'idée normalement et simplement.
 

Salutations.

Pourriez-vous me dire comment les niveaux horizontaux de la grille sont calculés dans mt4 et dans mt5 ?

 
Seric29:

Et pourquoi initialiser via un pointeur, je n'ai pas vu du tout dans l'aide comment les initialiser peut-être que j'ai regardé et que je n'ai pas compris, car les classes sont mal décrites dans l'aide lue 30 fois.

Un pointeur est un pointeur, une initialisation est une initialisation.

comprendre ce code d'abord :

1. int a;
2. int a = 5;

Qu'est-ce que l'initialisation dans ce code et qu'est-ce qu'une déclaration de variable?

Quand la mémoire est-elle allouée ?

et ensuite traiter le sujet de la POO et des pointeurs vers une classe et des pointeurs vers un objet avec ces connaissances.


Partez, pour une raison quelconque, je ne peux pas répondre aux questions élémentaires.

 
Igor Makanu:

Un pointeur est un pointeur, une initialisation est une initialisation.

comprendre ce code d'abord :

qu'est-ce que l'initialisation et la déclaration de variable dans ce code ?

Quand la mémoire est-elle allouée ?

puis utiliser ces connaissances pour discuter de la POO, des pointeurs vers une classe et des pointeurs vers un objet.


parti, pour une raison quelconque, je ne peux pas répondre aux questions élémentaires.

Voici un exemple simple et clair. La première variante est la déclaration de la variable et l'allocation de mémoire (la variable stocke une valeur arbitraire par défaut ou un numéro de secteur ou une adresse en C++, je ne sais pas), la deuxième variante est l'initialisation.

Et ce à quoi servent ces pointes de Type et avec quoi les manger aurait également dû être expliqué normalement.

Pointeurs vers une classe et pointeurs vers un objet

J'aurais aussi dû comprendre ce qu'ils sont. Je vais chercher sur le net et voir s'il y a quelque chose.

 
Andrey Sokolov:

Salutations.

Comment calculer les niveaux horizontaux d'une grille dans mt4 et dans mt5 ?

Si vous voulez détecter un niveau horizontal, vous devez d'abord déterminer le prix maximal ouvert, puis ajouter une certaine valeur et obtenir un nouveau prix qui vous permet d'observer quand le prix franchit cette condition de niveau et de placer un nouvel ordre ou de placer une grille d'ordres en attente en tenant compte du nombre maximal d'ordres, puis d'afficher cette grille.


en général, tout code compact est plus facile à visualiser et à modifier pour vos propres tâches.


Je ne sais pas si vous l'avez essayé et je n'ai jamais essayé beaucoup de programmes et je pense que c'est plus difficile à utiliser en TS simple, mais peut-être que vous ne l'avez jamais essayé.

 
Seric29:

Voici un exemple simple et clair. La première option est la déclaration de la variable et l'allocation de mémoire (la variable stocke une valeur arbitraire par défaut ou un numéro de secteur ou une adresse en C++, je ne sais pas), la deuxième option est l'initialisation.

Et pourquoi ces pointes de Type et avec quoi les manger auraient dû être expliquées correctement.

l'allocation de mémoire sera dans l'exemple 1 et dans l'exemple 2

L'exemple 2 est une déclaration et une initialisation, l'exemple 1 est seulement une déclaration.

la classe est la même, la classe est un type défini par l'utilisateur qui contient des champs (propriétés) et des méthodes permettant de travailler avec ces champs

un pointeur vers une classe est une déclaration, mais sans initialisation et sans allocation de mémoire pour le type (classe)

pointer = new MyClass() ; - il s'agit d'une déclaration et d'une initialisation, qui crée une nouvelle instance de la classe et cette instance sera renvoyée comme un lien vers un objet (ce n'est pas exactement un lien, en MQL c'est ... pas important et donc on s'y perd)

....

si vous ne voulez pas le lire, utilisez au moins ce post de moi pour modifier votre exemple :

CFoo *pfoo6=new CFoo();

à

CFoo *pfoo6;
pfoo6 = new CFoo();
CFoo *pfoo_7 =  pfoo6;

et essayez de comprendre ce qui se passe - quand vous assignez la dernière ligne à..... mais lisez quand même, demander simplement sur les forums n'est pas une option