Erreurs, bugs, questions - page 1297

 
A100:
La solution consiste à ne pas utiliser de méthodes non constantes dans des méthodes constantes. Et il n'y a aucun moyen de sauter par-dessus.

Eh bien, c'est le problème, MQ n'a pas voulu modifier la méthode virtuelle Compare depuis plusieurs années, qui est destinée à être utilisée dans le mécanisme de tri créé, et sans sa redéfinition, ce mécanisme ne fonctionne tout simplement pas. Par conséquent, je dois créer mon propre mécanisme de tri sans utiliser le mécanisme de tri prévu par la MQ.

J'ai créé mon propre mécanisme de tri dès le début de l'introduction de la POO dans MQL4, et je pensais naïvement que ce point était réglé dans MQL5, mais j'avais tort :)

 
_Konstantin_:

Eh bien, c'est le problème, MQ ne veut pas modifier la méthode virtuelle Compare depuis plusieurs années, qui est destinée à être utilisée dans le mécanisme de tri créé, et sans sa redéfinition, ce mécanisme ne fonctionne tout simplement pas. Par conséquent, nous devons créer notre propre mécanisme de tri sans utiliser le mécanisme de tri prévu par le MQ.

J'ai créé mon propre mécanisme de tri dès le début de l'introduction de la POO dans MQL4, et je pensais naïvement que ce point avait déjà été corrigé dans MQL5, mais j'avais tort :)

N'avez-vous pas le droit d'utiliser le modificateur const ?

class IntObject : public CObject
{
public:
   int Value;
   virtual int Compare(const CObject *node,const int mode=0) const
   {
      const IntObject* intObj = node;
      if(intObj.Value < Value)return MORE;
      else if(intObj.Value > Value)return LESS;
      return EQUAL;
   }
   IntObject();
   IntObject(int value){Value=value;}
};
 
C-4:

Votre religion ne vous permet-elle pas d'utiliser le modificateur const ?

Il présente un type d'erreur différent (appel d'une méthode non-const pour une constante objet)

#define  NO_CONST
class IntObject : public CObject {
public:
   virtual int f(const CObject *node ) NO_CONST { return 0; }
   virtual int Compare(const CObject *node,const int mode=0) const { return f( node ); }
};
Elle ne peut être surmontée pour des raisons fondamentales
 
A100:

Il présente un type d'erreur différent (appel d'une méthode non-const pour une constante objet)

Elle ne peut être surmontée pour des raisons fondamentales.
Comment pourrait-il en être autrement ? Il suffit de rendre constante la méthode à appeler dans l'objet constant.
 
C-4:
Comment pourrait-il en être autrement ? Il suffit de faire de la méthode appelée dans l'objet constant une constante.
f() ne peut être rendu const que s'il le permet
class IntObject : public CObject { public:
        int i;
   virtual int f(const CObject *node ) const { return i = 0; } //ошибка
};
 

J'ai une question, peut-être que quelqu'un me dira quelque chose !

J'ai créé un graphique synthétique hors ligne 1/EURUSD, GBPUSD et j'ai également défini EURUSD-1 GBPUSD+1 dans Equity.

J'obtiens des graphiques et des lignes d'indicateurs identiques, presque aucune différence https://charts.mql5.com/7/422/synthetic-m15-alpari-limited-6.png.

Et je crée un deuxième graphique synthétique hors ligne EURUSD,1/GBPUSD et je fixe EURUSD+1 GBPUSD+1 dans l'équité.

Je n' obtiens PAS de lignes identiques du graphique et de l'indicateur https://charts.mql5.com/7/422/synthetic-m15-alpari-limited-5.png.

La raison la plus probable est que l'EUR-USD est proche de la parité, c'est pourquoi son renversement avec 1/1.08 donne une distorsion minimale et le GBPUSD est plus éloigné de la parité, c'est pourquoi 1/1.48 donne plus de distorsion.

Pouvez-vous m'indiquer la manière correcte d'inverser un instrument ?

 

Auparavant, tout allait bien, mais maintenant je ne peux pas définir une ligne de 28 instruments dans le paramètre Symbol_Side_A de l'indicateur Equity (ci-joint) :

EURGBP-0.1 EURUSD-0.1 GBPUSD-0.1 EURCHF-0.1 EURCAD-0.1 EURAUD-0.1 EURNZD-0.1 EURJPY-0.1 AUDUSD-0.1 NZDUSD-0.1 USDCAD-0.1 USDCHF-0.1 USDJPY-0.1 GBPAUD-0.1 GBPCAD-0.1 GBPJPY-0.1 GBPCHF-0.1 NZDJPY-0.1 AUDJPY-0.1 CADJPY-0.1 CHFJPY-0.1 AUDCAD-0.1 NZDCAD-0.1 AUDCHF-0.1 AUDNZD-0.1 CADCHF-0.1 NZDCHF-0.1 GBPNZD-0.1

Une partie des données est coupée pour une raison quelconque et n'est pas affichée dans cette ligne. Il n'apparaît que lorsque j'active la ligne Symbol_Side_A. Quel peut être le problème ? Veuillez me conseiller.

Mon terminal MT4-765. ALPARI et RVD ont le problème, alors que GKFX est OK ! Étrange !

Dossiers :
 

Est-il vraiment si difficile de faire en sorte que le forum ne change pas le nom des fichiers téléchargés ? Comme sur les forums normaux !

J'ai téléchargé l'indicateur EquityHedgeGraph2(v670) ci-dessus. Alors pourquoi le nom s'est mélangé ?

 
Vous ne pouvez pas commenter à l'intérieur de la liste des paramètres #define
#define  MACRO( X/*комментарий*/ )       (X) //ошибка компиляции
mais cela peut être nécessaire, surtout s'il y a plusieurs paramètres
 

erreur de syntaxe

struct S {};
class A {
        int S() { return 1; }
        int f() { return S(); } //syntax error, если нет уточнения A::S() //а обязательно ли оно ???
};
mais de cette façon :
struct S {};
class A {
        void S() {}
        void f() { S(); }
};
OK, donc le compilateur comprend que A::S() est implicite et qu'il n'est pas nécessaire de l'indiquer explicitement.