Erreurs, bugs, questions - page 1161

 

Une faille dans le méta-éditeur.

Supposons que nous ayons une fonction Obj() qui renvoie un pointeur vers un objet :

class CObject {   public:     int value; }; CObject object;

CObject* Obj() { return GetPointer(object); }

Maintenant, si nous nous référons directement à l'objet par le biais de la fonction :Obj().value = 10, aucune liste contextuelle des membres de la classe et des méthodes n'apparaît après avoir saisi un point.

 
meat:

La classe CArray n'est pas une panacée, étant donné que MQL ne supporte pas les patrons de classe. Notre tableau n'est pas nécessairement constitué de types simples, et créer une structure complète du descendant CArray pour chaque nouvelle classe dans un programme n'est pas très intéressant. Regardez simplement combien de lignes de code prend chaque fichier descendant de CArray (ArrayInt.mqh, ArrayDouble.mqh etc.)

Et la façon dont la structure du programme est organisée est d'une importance secondaire. Ne nous éloignons pas du sujet. Le fait est que s'il existe un paramètre qui peut être modifié (dans ce cas, il s'agit de la taille de réserve), il devrait être possible de l'obtenir.

Les types complexes sont hérités de CObject et emballés en toute sécurité dans CArrayObj.

reserve_size - rompt le paradigme de la programmation économique. Il n'existe que pour les débutants et ne doit pas du tout exister dans les langues normales.

 
C-4:

reserve_size - viole le paradigme de la programmation frugale. Il n'existe que pour les débutants et ne devrait pas exister du tout dans les langues normales.

Vous avez un étrange paradigme. La réservation est précisément conçue pour une utilisation économique des ressources, en réduisant le nombre de réallocations de mémoire et de déplacements de données (et ce sont des opérations assez coûteuses). Et c'est un développeur de code qui doit gérer ce paramètre, car lui seul sait à l'avance comment son programme utilisera la mémoire. Et cela n'a rien à voir avec le langage, car un tableau est un tableau, il nécessite de la mémoire partout.

 
meat:

C'est un paradigme étrange pour vous. La réservation est précisément conçue pour une utilisation économique des ressources, en réduisant le nombre de réallocations de mémoire et de transferts de données (et ce sont des opérations assez coûteuses). Et c'est un développeur de code qui doit gérer ce paramètre, car lui seul sait à l'avance comment son programme utilisera la mémoire. Et cela n'a rien à voir avec le langage, car un tableau est un tableau tel quel, il nécessite de la mémoire partout.

Vous avez donc déjà répondu à votre propre question :

C'est le développeur du code qui doit gérer ce paramètre, car lui seul sait à l'avance comment son programme va utiliser la mémoire. Cela n'a rien à voir avec la langue du tout.

Il n'a rien à voir avec les moyens linguistiques et doit donc être résolu à un niveau supérieur, celui de l'utilisateur. Résolvez donc votre problème avec les classes CArray* spécialement créées pour ces tâches, qui, soit dit en passant, gèrent cette tâche avec brio et comme si elles avaient été créées pour cela.

 
meat:

Vous avez un étrange paradigme. La redondance est précisément conçue pour utiliser les ressources avec parcimonie, en réduisant le nombre de réaffectations de mémoire et de transferts de données (qui sont des opérations assez coûteuses)...

void TestFoo()
{
  CArrayObj listObj;
  listObj.Resize(100);
  for(int i = 0; i < 100; i++)
     listObj.Add(new CObject());
  int count = CountObj(listObj);
}

void CountObj(CArrayObj* obj)
{
   return obj.Size();
}
Code super-économique. Il n'y a aucune réallocation de mémoire, puisque le nombre d'éléments est connu à l'avance. Ce ne sont pas des tableaux qui sont transmis mais des pointeurs vers ceux-ci. La vitesse est incroyablement rapide et il n'y a pas besoin de reserve_size. Qu'est-ce qui ne vous plaît pas dans cette solution ?
 
C-4:
Code super-économique. Il n'y a aucune réallocation de mémoire, puisque le nombre d'éléments est connu à l'avance. Ce ne sont pas des tableaux qui sont transmis mais des pointeurs vers eux. La vitesse est incroyablement rapide, et nous n'avons pas besoin de reserv_size. Qu'est-ce qui ne vous convient pas dans cette solution ?

Eh, si seulement c'était aussi simple... Dans le monde réel, le nombre d'éléments n'est généralement pas connu à l'avance. Et qui plus est, ce nombre évolue de manière dynamique. Votre exemple simplifié de "Hello world" n'a donc aucun sens. Il peut être remplacé par deux lignes seulement :

CObject listObj[100];
int count = ArraySize(listObj);

Si, personnellement, vous n'utilisez pas le paramètre reserve_size, vous êtes le bienvenu. Mais n'en tirez pas la conclusion que tous les autres sont des imbéciles ou des novices. Peut-être que vous ne comprenez pas quelque chose. Dans les conteneurs STL standard, conçus pour travailler avec des tableaux (vecteur, chaîne, etc.), des méthodes telles que la réserve et la capacité sont toujours présentes aussi.

 
joo:

allez.... même un logiciel spécialisé comme Smart Rotator.... n'aide pas

C'est drôle, mais si je force le mode paysage dans Smart Rotator pour le terminal, toutes les fenêtres deviennent paysage. Mais je veux le mode portrait ! - J'ai mis le terminal en mode portrait, et quoi ? - hehehe... certaines fenêtres sont toujours en mode paysage et d'autres en mode portrait.

fonctionne bien sur le firmware stock (au moins comme prévu)
 

Dans la dernière version, la recherche dans MetaEditor (la boîte dans le coin supérieur droit) ne fonctionne plus correctement. Lorsque j'y entre le mot que je cherche, il le remplace automatiquement par une phrase similaire, prise je ne sais où et sans raison. Par exemple, j'essaie de trouver une variable nommée "ERROR_VALUE" mais j'obtiens "error_value 7" dans la ligne de recherche.

Question : d'où viennent ces déchets de gauche dans la ligne de recherche et comment les faire disparaître ?

 
meat:

Dans la dernière version, la recherche dans MetaEditor (la boîte dans le coin supérieur droit) ne fonctionne plus correctement. Lorsque j'y entre le mot que je cherche, il le remplace automatiquement par une phrase similaire, prise je ne sais où et sans raison. Par exemple, j'essaie de trouver une variable nommée "ERROR_VALUE" mais j'obtiens "error_value 7" dans la ligne de recherche.

Question : d'où viennent ces déchets de gauche dans la ligne de recherche et comment les faire disparaître ?

Nettoyez le clavier.
 
meat:

Dans la dernière version, la recherche dans MetaEditor (la boîte dans le coin supérieur droit) ne fonctionne plus correctement. Lorsque j'y entre le mot que je cherche, il le remplace automatiquement par une phrase similaire, prise je ne sais où et sans raison. Par exemple, j'essaie de trouver une variable nommée "ERROR_VALUE" mais j'obtiens "error_value 7" dans la ligne de recherche.

Question : que se passe-t-il ? D'où viennent ces restes de déchets dans la ligne de recherche et comment les faire disparaître ?

Il y a un engrenage à gauche du champ de saisie - c'est le réglage de l'endroit exact où effectuer la recherche. Mettez "dans le document" et il cherchera dans votre code. Ou le raccourci clavier (j'y suis plus habitué) "Ctrl "+"f".
Raison: