Errores, fallos, preguntas - página 1982

 
fxsaber:

Se activa el operador de copia por defecto.

Si no es difícil, ¿dónde puedo leerlo?

 

¿Pueden decirme cómo leer la información de un correo electrónico o sms utilizando MQL4/5? Por ejemplo, recibo información-señal al correo electrónico, mi Asesor Experto la lee y abre/cierra la posición.

 
fxsaber:

Se activa el operador de copia por defecto.

Incluso he encontrado esto en los documentos (nota la tercera línea desde abajo):

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);                             // эта строка не будет выполнена
  }

Recuerdo que era posible copiar (en estilo memcpy) a estructuras simples, pero mi estructura no es simple.

 
pavlick_:

Recuerdo que era posible copiar (estilo memcpy tonto) en estructuras simples, pero no tengo una estructura simple.

MQL5 ha cambiado.

 
fxsaber:

MQL5 ha cambiado.

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

La nueva versión de MetaTrader 5 build 1640: crea y prueba tus propios instrumentos financieros

MetaQuotes Software Corp., 2017.07.19 18:03

Nueva versión de la plataforma MetaTrader 5 build 1640: crear y probar sus propios instrumentos financieros

  1. MQL5: Se ha añadido la generación automática del operador de copia implícita para objetos de estructuras y clases. Ahora el compilador genera automáticamente operadores de copia, lo que permite escribir registros simples para objetos como 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
    */
      }
    El operador implícito copia objetos de memoria.

    • Si un miembro es un objeto, se llama al operador de copia correspondiente a este objeto.
    • Si el miembro es un array de objetos, antes de llamar al operador de copia apropiado para cada elemento, el array receptor se amplía o reduce al tamaño requerido mediante ArrayResize.
    • Si un miembro es un array de tipos simples, se utiliza la función ArrayCopy para copiar.
    • Si un miembro es un puntero a un objeto, se copia el propio puntero, no el objeto al que apunta.

    Si es necesario, puede anular el comportamiento y crear su propia variante en lugar del operador de copia implícito utilizando la sobrecarga.
 

fxsaber

Gracias, ahora tiene sentido. No sé si alegrarme o no. La compatibilidad con el código antiguo está rota. Es una buena idea forzar de alguna manera la activación de la nueva funcionalidad con cambios tan significativos (a través de interruptores de compilación o #pragma).


Por ejemplo, mi 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;
   }
};

Ahora resulta que auto_ptr puede copiarse en el nuevo código (a menos que se silencie el operador/constructor de copia), lo que llevará a múltiples eliminaciones de un solo puntero.

 
 

Archivo MQL5\Include\Controls\SpinEdit.mqh

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

 

¿Cómo puedo descargar MT4?
Descargo el archivo mt4setup.exe, lo instalo, pero la plataforma instala mt5. ¿Dónde puedo conseguir mt4?

 
lukyF:¿Cómo puedo obtener MT4?

Descargo el archivo mt4setup.exe, lo instalo, pero la plataforma instala mt5. ¿Dónde puedo conseguir mt4?

Puedes descargar mt4 desde tu broker. Esta pregunta surge cada semana...