Errori, bug, domande - pagina 1736

 
coderex:

Se qualcuno è interessato, la risposta di Servicedesk:

На данный момент оператор *(dereference/indirection) можно использовать только для указателей на объекты классов и это rvalue

Sono molto interessato! Si prega di spiegare la risposta del Service Desk con un esempio.

& == GetPointer(). * - non è cambiato nulla.

 
fxsaber:

Sono molto interessato! Si prega di spiegare la risposta del Service Desk con un esempio.

& == GetPointer(). * - non è cambiato nulla.

Di quale esempio avete bisogno?
 
coderex:

se qualcuno è interessato, la risposta è servicedesk:

На данный момент оператор *(dereference/indirection) можно использовать только для указателей на объекты классов и это rvalue
L'altro giorno ho inviato loro un suggerimento sull'introduzione di puntatori a qualsiasi tipo di dati. E questa ridicola restrizione è fastidiosa.
 
Alexey Navoykov:
A proposito, l'altro giorno ho inviato loro una proposta sull'introduzione di puntatori a qualsiasi tipo di dati. E questa ridicola restrizione è già fastidiosa.
Sarebbe bello introdurre l'overloading dell'operatore *, perché senza di esso non possiamo realizzare l'identità con STL, inoltre sarebbe bello introdurre typedef in pieno, non solo su calback`i
 
coderex:
sarebbe bello introdurre l'overloading dell'operatore *, perché senza di esso non possiamo realizzare l'identità con STL, inoltre sarebbe bello introdurre typedef in pieno, non solo su calback`i
Sì, sono d'accordo. Tutto è in uno stato incompiuto. E in termini di sovraccarichi sono più interessato all'operatore fantasma, è difficile farne a meno.
 
coderex:
Che tipo di esempio volete?
Cosa vuoi da * e &. Qualcosa di semplice ma illustrativo. Così potete vedere la convenienza.
 
fxsaber:
Cosa vuoi da * e &. Qualcosa di semplice ma illustrativo. Per vedere la convenienza.

Quello che voglio l'ho già scritto sopra.

Potete inventare voi stessi un esempio con l'operatore '&' dove usate GetPointer(...), è essenzialmente una forma breve

L'esempio con l'operatore '*' - non so se ti aiuta a capire:

class Iterator
  {
   int m_value;
public:
   Iterator(const int val) : m_value(val) { }
   int operator*() { return m_value; }
  };

int main(int argc, char **argv) {
   Iterator *_it = new Iterator(5);
  
   int _val = **_it;
//---
   return 0;
}


funziona in C++, ma in MQL dovrete fare un geter per ottenere m_value.

 

Aggiungi all'aiuto che ChartRedraw(MainChartID) non è adatto a ridisegnare OBJ_CHART. Il ChartRedraw(ObjChartID) è richiesto.

Pertanto, l'esempio nella Guida non è corretto.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_CHART
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_CHART
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_CHART - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Si prega di non limitare la scala a N <= 5 (dimensione dell'area sotto la barra = 2^N).

Questo è necessario (ed è diventato un espediente) per essere in grado di guardare la storia dei tick in modo più dettagliato.

 
Si prega di chiarire. Script
class A
{
public:
  const int a;
  
  A( int c = 0 ) : a(c) {}
  
  virtual int f()
  {
    Print(__FUNCTION__);
    
    return(this.a);
  }
};

class B : public A
{
public:
  const int b;
  
  B( int c = 0 ) : A(c), b(this.f()){}

  virtual int f()
  {
    Print(__FUNCTION__);
    
    return(this.a);
  }
};


void OnStart()
{
  B b;  
  A* a = new B;
  
  delete a;
}

Risultato

2016.10.18 09:35:01.981 Test14 (GBPUSD,M1)      B::f
2016.10.18 09:35:01.981 Test14 (GBPUSD,M1)      B::f

Qual è la ragione dell'uscita di B::F e non di A::f? Lo script è scritto in modo tale che f è chiamato PRIMA che il corpo del costruttore sia eseguito (in grassetto). Ma in quel momento il costruttore della classe base A è già stato chiamato. Ecco perché this.f() sembra riferirsi esattamente alla classe base prima che il costruttore B sia chiamato. Per favore, spiega dove sta l'errore di ragionamento/previsione.