Erreurs, bugs, questions - page 1416

 
Renat Fatkhullin:
L'exigence pour les modèles est de placer toutes les méthodes à l'intérieur de la description de la classe sans mettre les corps à l'extérieur.

Je vois, l'essentiel est de conserver cette exigence, car il suffit de créer des conteneurs de pile et de file d'attente et un mois plus tard, les modèles de classe sont apparus, et tout devrait mieux fonctionner avec eux :).

Une autre question concerne les modèles de classe. Il existe deux classes de modèles, l'une des classes en utilise une autre, y aura-t-il un transfert de type d'une classe de modèle à l'autre ou non ?

 
coderex:

Je vois, l'essentiel est de conserver cette exigence, car il suffit de créer des conteneurs de pile et de file d'attente et un mois plus tard, les modèles de classe sont apparus, et tout devrait mieux fonctionner avec eux :).

Une autre question concerne les modèles de classe. Il existe deux classes de modèles, l'une des classes en utilise une autre, y aura-t-il un transfert de type d'une classe de modèle à l'autre ou non ?

Essayez-le.
 
Renat Fatkhullin:
Essayez-le.
J'essaie et j'obtiens quelques erreurs, je pense à une autre façon de le faire...
 

Ilyas:
На сегодня известно о двух случаях:
1) в операции bool &= (bool expression)
2) Лишняя запятая в инициализирующих последовательностях: val={ {...},{...}, }

Alexey Navoykov :
Ces bogues ne sont toujours pas corrigés dans la nouvelle version ? Mon compilateur me donne toujours une erreur, je dois rester sur la version 1159.

J'ai vérifié juste au cas où avec une virgule supplémentaire dans la p.2 dans MT4 890 - cela donne juste un message d'erreur.
 

Quelqu'un a-t-il fait un tri CList?

En fait, nous devons remplacer Compare.

Mais tout le temps, j'appelle Compare de la classe de base. Mais ça ne marche pas, je me demande ce qui ne va pas ici...

Faites un exemple simple :

class COperation : public CObject
  {
public:
   double           number;
   COperation(double p) { number = p;}

virtual int Compare(const CObject *node,const int mode=0);
  };
  
 int COperation::Compare(const CObject *node,const int mode=0)
  {
   const COperation *ppp = node;
   
   if(this.number > ppp.number)
     {
      return 1;
     }
   if(this.number < ppp.number)
     {
       return -1;
     }
   
  return 0;
 }   


void OnStart()
  {
   CList *list = new CList();
   list.Add(new COperation(3));
   list.Add(new COperation(4));
   list.Add(new COperation(7));
   list.Add(new COperation(2));
   list.Add(new COperation(3));
   list.Add(new COperation(9));
   list.Add(new COperation(0));
   list.Add(new COperation(1));
   
   Print("After Sort");
   COperation *node = list.GetFirstNode();
   string numbers = "";
   for(;node != NULL; node = node.Next())
     {
      numbers += (string)node.number + " ";
     }
    Print(numbers); 
    numbers = "";
     
   list.Sort(0);
   
   Print("Before Sort");
   node = list.GetFirstNode();
   for(;node != NULL; node = node.Next())
     {
      numbers += (string)node.number + " ";
     }
   Print(numbers); 
   
   
   delete list;
  }
Dossiers :
sort.mq5  3 kb
 

Lors du traitement de modèles imbriqués (MQL4), je constate des problèmes avec le passage de type - quelqu'un a-t-il remarqué cela ?

En particulier, il y a une classe A avec une méthode template, à l'intérieur de laquelle un objet d'une autre classe B est créé par un constructeur template utilisant le même type T que celui avec lequel la méthode a été initialisée. En conséquence, à l'intérieur de cette méthode, le typename définit correctement le type passé, par exemple int, mais à l'intérieur du constructeur B, le typename est déjà string.

SD ?

 
La façon la plus orthodoxe de trier la feuille est de la surcharger dans un tableau, de trier le tableau et de le surcharger à nouveau.
 

J'utilise le triage tout le temps - pas de problèmes du tout.

Vous,sigma7i, avez incorrectement surchargé la méthode Coperation::Compare(), elle retourne le mauvais type de valeur, que la méthode de base CObject::Compare() retourne, et le compilateur la considère comme séparée, et non virtuelle. En conséquence, seule la méthode de base est appelée dans vos objets, le compilateur croit qu'il n'y a pas de descendant...

 
sigma7i:

Mais tout le temps, il appelle Compare de la classe de base. Mais ça ne marche pas, donc je pense qu'il y a un problème...

virtual int Compare(const CObject *node,const int mode=0) const;
 

A100:

virtual int Compare(const CObject *node,const int mode=0) const;


Vous avez raison. Court et clair, sans mots superflus. J'ai posté un code fonctionnel.

Dossiers :
sort.mq5  3 kb