Erreurs, bugs, questions - page 2362

 
Igor Makanu:

Vous avez probablement raison, j'ai essayé votre exemple, mais je veux utiliser typedef

Maintenant le compilateur saute mon exemple, mais j'ai besoin... j'ai besoin de quelque chose... mais quoi ?

Appel de pointeur de fonction non valide dans 'tst_file.mq4' (30,7)


Donc, je dois écrire une fonction et l'assigner au pointeur))).

typedef CMyclass* (*PtrCMyclass)(CObject*);
CMyclass* FMyCast1(CObject*p){ CMyclass *r = dynamic_cast<CMyclass*>(p); if(CheckPointer( r ) != POINTER_INVALID) return r; else return NULL; }
PtrCMyclass Myclass = FMyCast1;
 
Ilya Malev:

Il faut donc écrire une fonction et l'affecter à un pointeur))).

Hm, c'est logique, mais cela ne me donne pas un point pour aborder les champs de classe si j'écris la fonction de la manière suivante

PtrCMyclass Myclass(CObject* obj){ return(GetPointer(obj)) ; } ;

x' - type de structure ou de classe attendu tst_file.mq4 30 38


 
Essayez comme je l'ai écrit ci-dessus. Bien que le typedef ne soit pas vraiment nécessaire ici, car il s'agit d'un "rembourrage" supplémentaire entre le code et l'appel de fonction. Vous ne pouvez toujours pas surcharger cet appel pour une autre classe utilisant le même pointeur. Vous devrez en faire un nouveau pour chaque classe. Il est temps que vous réalisiez que les typedefs sont un peu moins que complètement inutiles, imho :)
 
Igor Makanu:

((CMyclass*)base.GetNodeAtIndex(i)).x

 
Ilya Malev:
Essayez comme je l'ai écrit ci-dessus. Bien que le typedef ne soit pas nécessaire ici, car il s'agit d'un "espaceur" supplémentaire entre le code et l'appel de fonction. Vous ne pouvez toujours pas surcharger cet appel pour une autre classe utilisant le même pointeur. Vous devrez en faire un nouveau pour chaque classe. Il est temps que vous réalisiez que les typedefs sont un peu moins que complètement inutiles, imho :)

J'ai essayé, mais je ne sais toujours pas comment travailler avec defans, la science est compliquée, j'ai eu une erreur : tst_file EURUSD,H1 : invalid pointer access in 'tst_file.mq4' (31,56)

#property strict
#include <Object.mqh>
#include <Arrays\List.mqh>
//+------------------------------------------------------------------+
class CMyclass:public CObject
  {
public:
   int               x;
   double            y;
   void              CMyclass(void):x(-1),y(-2.2) { }
  };
//+------------------------------------------------------------------+
#define  alive(node)  (CheckPointer(node)==POINTER_DYNAMIC)
#define  loopf(type, node)  for(type *o; o=node;)
//+------------------------------------------------------------------+
void OnStart()
  {
   CList *base=new CList;
   CMyclass *res;
   for(int i=0;i<3;i++)
     {
      base.Add(new CMyclass);
      loopf(CMyclass,base.GetCurrentNode()){ o.x = 99; res.y = 555;}
     }

   for(int i=0;i<3;i++)
     {
      res=base.GetNodeAtIndex(i);
      Print(res.x," : ",res.y);
     }
   delete base;
  }
//+------------------------------------------------------------------+
 
TheXpert:

((CMyclass*)base.GetNodeAtIndex(i)).x

HOORAY ! ÇA A MARCHÉ ! !!

Merci !

#property strict
#include <Object.mqh>
#include <Arrays\List.mqh>
//+------------------------------------------------------------------+
class CMyclass:public CObject
  {
public:
   int               x;
   double            y;
   void              CMyclass(void):x(-1),y(-2.2) { }
  };
//+------------------------------------------------------------------+
void OnStart()
  {
   CList *base=new CList;
   for(int i=0;i<3;i++)
     {
      base.Add(new CMyclass);
      ((CMyclass*)base.GetCurrentNode()).x = 99;
      ((CMyclass*)base.GetCurrentNode()).y = 555;
     }

   for(int i=0;i<3;i++)
     {
      Print(((CMyclass*)base.GetNodeAtIndex(i)).x," : ",((CMyclass*)base.GetNodeAtIndex(i)).y);
     }
   delete base;
  }
//+------------------------------------------------------------------+

;)

 
Igor Makanu:

J'ai essayé, mais je ne sais toujours pas comment travailler avec defans, la science est compliquée, j'ai eu une erreur : tst_file EURUSD,H1 : invalid pointer access in 'tst_file.mq4' (31,56)

Je serais très surpris que ma boucle fonctionne avec votre nœud de bibliothèque))).

Je faisais référence au code typedef dans mon dernier message, bien sûr)))

Igor Makanu:

HOORAY ! ÇA A MARCHÉ ! !!

Merci !

;)

Vraiment, pourquoi n'avez-vous pas essayé la plus évidente d'emblée ? :) Vous vouliez tellement faire du rock avec un typedef ? =)))

 
Ilya Malev:

Vraiment, pourquoi n'avez-vous pas essayé la plus évidente en premier ? :) Vous vouliez tellement faire du rock avec le typedef ? =)))

J'ai essayé ! J'étais sûr que je ne pourrais pas déréférencer un pointeur en utilisant MQL, mais cela s'est avéré être trivial - j'aurais dû mettre plus de crochets ! ))))

ZS : typedef est un sujet, j'ai essayé, mais ça n'a pas bien marché non plus, je dois encore trouver où je me suis trompé, mon exemple devrait aussi fonctionner avec typedef !

 
Alexandr Sokolov:

Quelle est la raison pour laquelle l'indicateur peut ne pas fonctionner seulement sur le graphique M1, mais sur tous les autres graphiques, il fonctionne correctement ? (MQL5). Voici la fonction - et lorsque je lui donne 0 sur le graphique M1, elle ne résume pas une variable.


Cela signifie qu'il existe un chandelier avec Open = Close, alors que le code est mal écrit et ne contient pas la vérification de la division par 0. Ce fait malheureux ne dépend pas de la TF.

 
Igor Makanu:

typedef est un sujet, j'ai essayé, mais ça ne s'est pas bien passé, je dois encore trouver où je me suis trompé, mon exemple devrait fonctionner avec typedef aussi !

Le code que j'ai écrit ci-dessus devrait fonctionner. J'ai voulu le vérifier moi-même, mais sans succès : =)))))))))))


(construction 1961)

Raison: