Fehler, Irrtümer, Fragen - Seite 1297

 
_Konstantin_:

Ich versuche, es zu überschreiben, aber ich erhalte eine Call Non-Const-Methode für konstante Objekt Fehler, weil Nicht-Konst-Methoden nicht in einer konstanten Methode verwendet werden können. Ich kann nicht herausfinden, wie ich die Methode der virtuellen Konstanten richtig überschreiben kann.

Der Ausweg ist, keine Nicht-Konst-Methoden in Konst-Methoden zu verwenden. Und Sie können dies in keiner Weise außer Kraft setzen.
 
A100:
Die Lösung besteht darin, keine Nicht-Konst-Methoden in Konst-Methoden zu verwenden. Und es gibt keine Möglichkeit, sie zu überspringen.

Die Sache ist die, dass MQ die virtuelle Methode Compare, die für den erstellten Sortiermechanismus vorgesehen ist, seit mehreren Jahren nicht ändern wollte, und ohne ihre Neudefinition funktioniert dieser Mechanismus einfach nicht. Folglich müssen wir unseren eigenen Sortiermechanismus erstellen, ohne den von MQ vorgesehenen Sortiermechanismus zu verwenden.

Ich habe meinen eigenen Sortiermechanismus gleich zu Beginn der Einführung von OOP in MQL4 erstellt und dachte naiverweise, dass dieser Punkt in MQL5 behoben wurde, aber ich lag falsch :)

 
_Konstantin_:

Nun, das ist die Sache, MQ will die virtuelle Methode Compare seit mehreren Jahren nicht ändern, die für den erstellten Sortiermechanismus vorgesehen ist, und ohne ihre Neudefinition funktioniert dieser Mechanismus einfach nicht. Infolgedessen muss ich meinen eigenen Sortiermechanismus erstellen, ohne den von MQ vorgesehenen Sortiermechanismus zu verwenden.

Ich habe meinen eigenen Sortiermechanismus gleich zu Beginn der Einführung von OOP in MQL4 erstellt und dachte naiverweise, dass dieser Punkt in MQL5 bereits behoben sei, aber ich lag falsch :)

Sie können den Modifikator const nicht verwenden, oder?

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:

Erlaubt Ihnen Ihre Religion nicht, den Modifikator const zu verwenden?

Es hat eine andere Art von Fehler (Aufruf einer Nicht-Konst-Methode für eine Konstante Objekt)

#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 ); }
};
Sie kann aus grundlegenden Gründen nicht überwunden werden
 
A100:

Es hat eine andere Art von Fehler (Aufruf einer Nicht-Konst-Methode für eine Konstante Objekt)

Sie kann aus fundamentalen Gründen nicht überwunden werden.
Wie könnte es anders sein? Es reicht aus, die Methode, die in dem konstanten Objekt aufgerufen werden soll, konstant zu machen.
 
C-4:
Wie könnte es anders sein? Es reicht aus, die Methode, die in dem konstanten Objekt aufgerufen wird, zu einer Konstanten zu machen.
f() kann nur zu const gemacht werden, wenn es dies erlaubt
class IntObject : public CObject { public:
        int i;
   virtual int f(const CObject *node ) const { return i = 0; } //ошибка
};
 

Ich habe eine Frage, vielleicht kann mir jemand etwas sagen!

Ich erstelle ein synthetisches Offline-Diagramm 1/EURUSD,GBPUSD und setze auch EURUSD-1 GBPUSD+1 in Equity

Ich erhalte identische Diagramme und Indikatorlinien, fast keinen Unterschied https://charts.mql5.com/7/422/synthetic-m15-alpari-limited-6.png

Und ich erstelle ein zweites synthetisches Offline-Diagramm EURUSD,1/GBPUSD und setze EURUSD+1 GBPUSD+1 im Eigenkapital

Ich erhalte NICHT identische Linien des Charts und des Indikators https://charts.mql5.com/7/422/synthetic-m15-alpari-limited-5.png

Der wahrscheinlichste Grund ist, dass EUR-USD nahe an der Parität liegt, weshalb seine Umkehrung mit 1/1,08 eine minimale Verzerrung ergibt, während GBPUSD weiter von der Parität entfernt ist, weshalb 1/1,48 eine größere Verzerrung ergibt.

Können Sie mir sagen, wie ich ein Instrument richtig umdrehen kann?

 

Früher war es OK, aber jetzt kann ich keine Zeile mit 28 Instrumenten im Parameter Symbol_Side_A im Indikator Equity (im Anhang) einstellen:

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

Ein Teil der Daten ist aus irgendeinem Grund abgeschnitten und wird in dieser Zeile nicht angezeigt. Sie erscheint nur, wenn ich die Zeile Symbol_Side_A aktiviere. Woran kann das liegen? Bitte beraten Sie mich.

Mein MT4-765-Terminal. ALPARI und RVD haben das Problem, während GKFX OK ist! Seltsam!

Dateien:
 

Ist es wirklich so schwer, das Forum so zu gestalten, dass sich die Namen der hochgeladenen Dateien nicht ändern? Wie in normalen Foren!

Ich habe den oben genannten Indikator EquityHedgeGraph2(v670) heruntergeladen. Warum also ist der Name durcheinander geraten?

 
Sie können nicht innerhalb der Parameterliste kommentieren #define
#define  MACRO( X/*комментарий*/ )       (X) //ошибка компиляции
aber es kann notwendig sein, insbesondere wenn es mehrere Parameter gibt