Errori, bug, domande - pagina 1982

 
fxsaber:

Viene attivato l'operatore di copia predefinito.

Se non è difficile, dove posso leggerlo?

 

Potete dirmi come leggere informazioni da un'e-mail o da un sms usando MQL4/5? Per esempio, ricevo informazioni-segnale via e-mail, il mio Expert Advisor le legge e apre/chiude la posizione.

 
fxsaber:

Viene attivato l'operatore di copia predefinito.

Ho anche trovato questo nei documenti (notare la terza riga dal basso):

https://www.mql5.com/ru/docs/basis/types/casting

class CBar { };
class CFoo : public CBar { };
 
void OnStart()
  {
   CBar bar;    
//--- динамическое приведение типа указателя *bar к указателю *foo разрешено 
   CFoo *foo = dynamic_cast<CFoo *>(&bar); // критической ошибки выполнения не возникнет   
   Print(foo);                             // foo=NULL      
//--- попытка явного приведения ссылки объекта типа Bar к объекту типа Foo запрещено
   foo=(CFoo *)&bar;                       // возникнет критическая ошибка выполнения
   Print(foo);                             // эта строка не будет выполнена
  }

Ricordo che era possibile copiare (in stile memcpy) in strutture semplici, ma la mia struttura non è semplice.

 
pavlick_:

Ricordo che era possibile copiare (stile memcpy stupido) in strutture semplici, ma non ho una struttura semplice.

MQL5 è cambiato.

 
fxsaber:

MQL5 è cambiato.

Forum sul trading, sistemi di trading automatico e test di strategie di trading

La nuova versione di MetaTrader 5 build 1640: crea e testa i tuoi strumenti finanziari

MetaQuotes Software Corp., 2017.07.19 18:03

Nuova versione della piattaforma MetaTrader 5 build 1640: creare e testare i propri strumenti finanziari

  1. MQL5: Aggiunta la generazione automatica dell'operatore di copia implicita per oggetti di strutture e classi. Ora il compilatore genera automaticamente gli operatori di copia, il che permette di scrivere semplici record per oggetti come b=a:
    class Foo
      {
       int               value;
    public:
       string Description(void){return IntegerToString(value);};
       //--- конструктор по умолчанию
                         Foo(void){value=-1;};
       //--- конструктор с параметрами   
                         Foo(int v){value=v;};
      };
    //+------------------------------------------------------------------+
    //|  структура, содержащая объекты типа Foo                          |
    //+------------------------------------------------------------------+
    struct MyStruct
      {
       string            s;
       Foo               foo;
      };
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //---
       MyStruct a,b;
       Foo an_foo(5);
       a.s="test";
       a.foo=an_foo;
       Print("a.s=",a.s," a.foo.Description()=",a.foo.Description());
       Print("b.s=",b.s," b.foo.Description()=",b.foo.Description());
    //---
       Print("b=a");
       b=a;
    //---
       Print("a.s=",a.s," a.foo.Description()=",a.foo.Description());
       Print("b.s=",b.s," b.foo.Description()=",b.foo.Description());
    /*
       Результат выполнения;
       a.s=test a.foo.Description()=5
       b.s= b.foo.Description()=-1
       b=a
       a.s=test a.foo.Description()=5
       b.s=test b.foo.Description()=5
    */
      }
    L'operatore implicito copia gli oggetti a memoria.

    • Se un membro è un oggetto, viene chiamato l'operatore di copia corrispondente a questo oggetto.
    • Se il membro è un array di oggetti, prima di chiamare l'operatore di copia appropriato per ogni elemento, l'array ricevente viene ingrandito o ridotto alla dimensione richiesta tramite ArrayResize.
    • Se un membro è un array di tipi semplici, la funzione ArrayCopy viene utilizzata per la copia.
    • Se un membro è un puntatore a un oggetto, viene copiato il puntatore stesso, non l'oggetto a cui punta.

    Se necessario, potete sovrascrivere il comportamento e creare la vostra variante al posto dell'operatore di copia implicito usando l'overloading.
 

fxsaber

Grazie, ora ha senso. Non so se gioire o meno. La compatibilità con il vecchio codice è rotta. È una buona idea forzare in qualche modo l'attivazione di nuove funzionalità con cambiamenti così significativi (tramite switch di compilazione o #pragma).


Per esempio, il mio auto_ptr:

template <typename T_>
class auto_ptr
{
public:
   T_ *p;
   void reset()  {if(this.p) delete this.p; this.p=NULL;}
   auto_ptr(void *ptr=NULL): p(ptr)  {}
   ~auto_ptr()  {this.reset();}
   void swap(auto_ptr<T_> &other)
   {
      T_ *buf = this.p;
      this.p = other.p;
      other.p = buf;
   }
};

Ora si scopre che auto_ptr può essere copiato nel nuovo codice (a meno che l'operatore/costruttore di copia sia silenziato), il che porterà a cancellazioni multiple di un singolo puntatore.

 
 

File MQL5\Include\Controls\SpinEdit.mqh

int MaxValue(void) const { return(m_min_value); }

 

Come faccio a scaricare MT4?
Ho scaricato il file mt4setup.exe, l'ho installato, ma la piattaforma installa mt5. dove posso trovare mt4?

 
lukyF: Come posso ottenere MT4?

Ho scaricato il file mt4setup.exe, l'ho installato, ma la piattaforma installa mt5. dove posso trovare mt4?

Puoi scaricare mt4 dal tuo broker. Questa domanda arriva ogni settimana...