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

 

Это нормально и абсолютно правильно. Вы же запросили внутренний размер(без полезной нагрузки) динамического объекта.

Используйте ArraySize для динамических объектов и применяйте sizeof только к статическим объектам. Sizeof считается на этапе компиляции и всегда является константой.

 
Renat Fatkhullin:

Это нормально и абсолютно правильно.

Используйте ArraySize для динамических объектов и применяйте sizeof только к статическим объектам. 

Спасибо! Просьба привести Справку в соответствие с этой рекомендацией.
 

Читайте документацию до конца

Вычисления размера происходит на этапе компиляции.

 

Прошу помощи, у самого ступор. Для объяснения написал такой скрипт

struct STRUCT 
{
  int a;
};

class CLASS
{
public:
  int a;
};

STRUCT f1()
{  
  static int i = 0;
  
  STRUCT Res;
  
  Res.a = i++;   
  
  return(Res);
}

CLASS* f2()
{
  static int i = 0;
  
  CLASS* Res = new CLASS;
  
  Res.a = i++;
  
  return(Res);
}

void OnStart()
{
  int i1 = f1().a + f1().a;  
  int i2 = f2().a + f2().a;
}

Есть структура и есть аналогичный класс. Мне нужно, чтобы после расчета i2 соответствующие объекты класса удалялись самопроизвольно, как это происходит с объектами структуры, когда идет аналогичный расчет i1. Как такое провернуть?

 

fxsaber:

Как такое провернуть?

Завернуть в умный указатель, не уверен что это можно сделать средствами mql
 
Комбинатор:
Завернуть в умный указатель, не уверен что это можно сделать средствами mql
Сама проблема возникла из-за невозможности возврата сложной структуры. Например, если в коде выше вместо int a; сделать string a;, то f1() будет обламываться на return. Поэтому взгляд упал на классы, но там ожидала описанная засада.
 

Вообще можно переопределить копи конструктор и оператор=

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

 
Комбинатор:

Вообще можно переопределить копи конструктор и оператор=

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

Вот Спасибо! Меня останавливало от этого решения недавно снятое ограничение. Теперь пашет
struct STRUCT
{
  string Str;

  template <typename T>
  void operator =( const T Value )
  {
    Print(__FUNCTION__);
  }
  
  void operator =( const STRUCT &Struct )
  {
    this.Str = Struct.Str;
  }
};

STRUCT f()
{
  STRUCT Res;
  
  return(Res);
}

void OnStart()
{
  f() = 1;
}
 

При оптимизации советника появляется вот такая ошибка

genetic pass (0, 3) tested with error "critical runtime error 512 in OnTimer function (sleep function reaches end of test)" in 0:37:20.429 + history synchronization 0:00:43.395

Одиночное тестирование проходит без ошибок.

Версия у MT5 и MetaEditor  1571.

 
pivomoe:

При оптимизации советника появляется вот такая ошибка

genetic pass (0, 3) tested with error "critical runtime error 512 in OnTimer function (sleep function reaches end of test)" in 0:37:20.429 + history synchronization 0:00:43.395

Выкинуть из советника максимум, чтобы ошибка воспроизводилась. И опубликовать оставшийся код.

Причина обращения: