Errori, bug, domande - pagina 1297

 
_Konstantin_:

Sto cercando di sovrascriverlo, ma ottengo un errore di chiamata del metodo non-const per l'oggetto costante, perché i metodi non-const non possono essere usati in un metodo costante. Non riesco a capire come sovrascrivere correttamente il metodo della costante virtuale.

La via d'uscita è non usare metodi non-const in metodi const. E non si può scavalcare in alcun modo.
 
A100:
La soluzione è non usare metodi non-const in metodi const. E non c'è modo di saltarci sopra.

Bene, questo è il punto, MQ non ha voluto cambiare il metodo virtuale Compare per diversi anni, che è destinato ad essere utilizzato nel meccanismo di ordinamento creato, e senza la sua ridefinizione questo meccanismo semplicemente non funziona. Di conseguenza, dobbiamo creare il nostro meccanismo di ordinamento senza usare il meccanismo di ordinamento previsto da MQ.

Ho creato il mio meccanismo di ordinamento fin dall'inizio dell'introduzione dell'OOP in MQL4, e ingenuamente pensavo che questo punto fosse fissato in MQL5, ma mi sbagliavo :)

 
_Konstantin_:

Bene, questo è il punto, MQ non vuole cambiare il metodo virtuale Compare per diversi anni, che è destinato ad essere utilizzato nel meccanismo di ordinamento creato, e senza la sua ridefinizione questo meccanismo semplicemente non funziona. Di conseguenza, dobbiamo creare il nostro meccanismo di ordinamento senza usare il meccanismo di ordinamento previsto da MQ.

Ho creato il mio meccanismo di ordinamento fin dall'inizio dell'introduzione dell'OOP in MQL4, e ingenuamente pensavo che questo punto fosse già stato risolto in MQL5, ma mi sbagliavo :)

Non permette di usare il modificatore 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:

La vostra religione non vi permette di usare il modificatore const?

Ha un diverso tipo di errore (chiamare il metodo non-const per la costante oggetto)

#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 ); }
};
Non può essere superato per ragioni fondamentali
 
A100:

Ha un diverso tipo di errore (chiamare il metodo non-const per la costante oggetto)

Non può essere superato per ragioni fondamentali.
Come potrebbe non esserlo? È sufficiente rendere costante il metodo da chiamare nell'oggetto costante.
 
C-4:
Come potrebbe non esserlo? È sufficiente che il metodo chiamato nell'oggetto constant sia una costante.
f() può essere reso const solo se lo permette
class IntObject : public CObject { public:
        int i;
   virtual int f(const CObject *node ) const { return i = 0; } //ошибка
};
 

Ho una domanda, forse qualcuno mi dirà qualcosa!

Creo un grafico sintetico offline 1/EURUSD,GBPUSD e imposto anche EURUSD-1 GBPUSD+1 in Equity

Ottengo grafici e linee di indicatori identici, quasi nessuna differenza https://charts.mql5.com/7/422/synthetic-m15-alpari-limited-6.png

E creo un secondo grafico sintetico offline EURUSD,1/GBPUSD e imposto EURUSD+1 GBPUSD+1 nell'equity

Non ottengo linee identiche del grafico e dell'indicatore https://charts.mql5.com/7/422/synthetic-m15-alpari-limited-5.png

La ragione più probabile è che EUR-USD è vicino alla parità, per cui la sua inversione con 1/1.08 dà una distorsione minima e GBPUSD è più lontano dalla parità, per cui 1/1.48 dà più distorsione.

Potete dirmi il modo corretto di invertire uno strumento?

 

Prima era OK, ma ora non posso impostare una linea di 28 strumenti nel parametro Symbol_Side_A nell'indicatore Equity (allegato):

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

Una parte dei dati è tagliata per qualche motivo e non viene visualizzata in questa riga. Appare solo quando attivo la linea Symbol_Side_A. Quale può essere il problema? Si prega di avvisare.

Il mio terminale MT4-765. ALPARI e RVD hanno il problema, mentre GKFX è OK! Strano!

 

È davvero così difficile fare il forum in modo che i nomi dei file caricati non cambino? Come nei forum normali!

Ho scaricato l'indicatore EquityHedgeGraph2(v670) qui sopra. Allora perché il nome si è incasinato?

 
Non è possibile commentare all'interno dell'elenco dei parametri #define
#define  MACRO( X/*комментарий*/ )       (X) //ошибка компиляции
ma può essere necessario, specialmente se ci sono diversi parametri