Ошибки, баги, вопросы - страница 1982

 
fxsaber:

Срабатывает оператор копирования по-умолчанию.

Если не сложно, где почитать?

 

Подскажите как можно считывать информацию с емайла или смс с помощью MQL4/5. Напр. получаю информацию-сигнал на емайл, советник считывает и открывает/закрывает позицию.

 
fxsaber:

Срабатывает оператор копирования по-умолчанию.

В доках даже такое нашёл (внимание на 3ю строку снизу):

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

Помню, что можно было копировать (тупо в стиле memcpy) в простые структуры, но у меня ведь не простая структура.

 
pavlick_:

Помню, что можно было копировать (тупо в стиле memcpy) в простые структуры, но у меня ведь не простая структура.

MQL5 поменялся.

 
fxsaber:

MQL5 поменялся.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Новая версия платформы MetaTrader 5 build 1640: создание и тестирование собственных финансовых инструментов

MetaQuotes Software Corp., 2017.07.19 18:03

Новая версия платформы MetaTrader 5 build 1640: создание и тестирование собственных финансовых инструментов

  1. MQL5: Добавлена автоматическая генерация неявного оператора копирования для объектов структур и классов. Теперь компилятор автоматически создает операторы копирования, что позволяет писать для объектов простые записи вида 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
    */
      }
    В неявном операторе осуществляется почленное копирование объектов.

    • Если член является объектом, вызывается соответствующий для этого объекта оператор копирования.
    • Если член является массивом объектов, то перед вызовом соответствующего оператора копирования для каждого элемента принимающий массив увеличивается или уменьшается до нужного размера через ArrayResize.
    • Если член является массивом простых типов, для копирования используется функция ArrayCopy.
    • Если член является указателем на объект, копируется сам указатель, а не объект, на который он указывает.

    При необходимости можно переопределить поведение и вместо неявного оператора копирования создать собственный вариант с помощью перегрузки.
 

fxsaber

Спасибо, теперь понятно. Даже не знаю радоваться ли. Ломается совместимость со старым кодом. По-хорошему надо как-то принудительно активировать новый функционал при столь значительных изменениях (через ключи компиляции или #pragma).


Например, мой 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;
   }
};

Теперь оказывается, что auto_ptr можно скопировать в новом коде (если не заглушить копирующие оператор/конструктор), что приведёт к множественному удалению одного указателя.

 
 

Файл  MQL5\Include\Controls\SpinEdit.mqh

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

 

Как скачать MT4?
Скачиваю файлик mt4setup.exe, устанавливаю, а платформа устанавливается mt5. где взять mt4?

 
lukyF:  Как скачать MT4?

Скачиваю файлик mt4setup.exe, устанавливаю, а платформа устанавливается mt5. где взять mt4?

у своего брокера. Этот вопрос поднимается каждую неделю...
Причина обращения: