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

 
class A{
public:
   uchar data1;
};

A func(){
   A a;
   a.data1 = 1;
   return a;      //object of 'A' cannot be returned, copy constructor 'A::A(const A &)' not found
}


void OnStart(){  
   A a;

   //1
   A aa = a;
   a = aa;
   
   //2
   a = func();   
}

А в чем разница между //1 и //2 ?
К сожалению, данную проблему при использовании templates в контейнерах с произвольным типом данных ни как не обойти.

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

 
Разработчикам:
Прошу добавить функцию возвращающую для массива его Capacity (количество элементов для которых зарезервировано место в памяти). Не путать с параметром reserve для ArrayResize.
Для string есть StringBufferLen, а для массива ни чего нет.
 

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

Ошибки, баги, вопросы

Sergey Dzyublik, 2019.05.22 16:01

Спасибо еще раз TheXpert за предоставленный код.
Имеем следующие результаты по ArrayResize capacity МТ5(build 2057):


Результат:
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TEST_ArrayCapacity:TEST_ArrayCapacity
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,0):100
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):100
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,101,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,200,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,201,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,202,100):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,1):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,400):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,300,400):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,301,600):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,302,600):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,303,600):903
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,0):903
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):903
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,-1):100
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):100
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,105,100):205

 

Добрый вечер!

Кто-нибудь может подсказать, что происходит?

Впервые такое встречаю. Простой код в одной из функций.

double yyy=28/50*100;
   
Print("test yyy=", yyy);

Результат:

"2019.05.21 19:38:29.364 2019.04.01 00:05:00   test yyy=0.0"


 
Michael2K:

Добрый вечер!

Кто-нибудь может подсказать, что происходит?

int(28) / int(50) * int(100) == int(0) * int(100) == int(0) == double(0.0)


Используйте точку, что бы указать тип double:

double yyy=28./50*100;
 
Sergey Dzyublik:
Прошу так же предоставить псевдокод о использовании параметра reserve_size в ArrayResize.
Ни где не описано поведение системы при указании нового значения reserve_size при очередном ArrayResize.
Sergey Dzyublik:


Верно ли следующее предположение при последовательном вызове:

Псевдокод они когда-то давали в этой ветке, поищите.  Насколько помню, capacity там увеличивается только при выходе размера массива за пределы этого capacity.  Хотя конечно что-то могло и поменяться.

А функция по получению значения сapacity действительно очень нужна.

 
Alexey Navoykov:

Псевдокод они когда-то давали в этой ветке, поищите.  Насколько помню, capacity там увеличивается только при выходе размера массива за пределы этого capacity.  Хотя конечно что-то могло и поменяться.

А функция по получению значения сapacity действительно очень нужна.

Спасибо за информацию, пока что нашел как fxsaber то же искал ))

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

Ошибки, баги, вопросы

fxsaber, 2018.04.13 10:04

Помогите найти пост разработчика, где был выложен исходник ArrayResize. Поиск через гугл "site:mql5.com/ru/forum ArrayResize+reserve" не помогает.

Помню, что был исходник. В нем сразу видно, какая логика реализации reserve-параметра.

Искал в гуле, искал на форуме, искал в профилях основных разработчиков...
Кроме возможности использовать reserve_size со значением -1 в ArrayResize для очистки ранее выделенной памяти ни чего не нашел.
 
Sergey Dzyublik:

Спасибо за информацию, пока что нашел как fxsaber то же искал ))

И я не нашел )

Вроде @Slava об этом писал.

 

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

Ошибки, баги, вопросы

Ilyas, 2016.08.24 11:08

В массиве ("внутри") хранится allocated - под сколько элементов массив распределён.

Логика работы с резервом(условный код):
ArrayResize(arr,int size,int reserve)
  {
   if(arr.allocated<size)
      if(!ArrayAllocateMemory(arr,size+reserve))  // -> arr.allocated=size+reserve;
         return(-1);
   //---
   CallConstructorsOrDestructors(arr,size);
   //---
   arr.size=size;
   return(size);
  }

 
Alexey Navoykov:

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