![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Это вряд ли.
это точно, она работает только с массивами чисел, строк.
это точно, она работает только с массивами чисел, строк.
{
int j;
STRUCT( void )
{
static int i = 0;
j = i;
i++;
}
};
void OnStart()
{
STRUCT Array1[5], Array2[5];
ArrayCopy(Array1, Array2);
}
{
//Print(__FUNCTION__," del count=",ArraySize(m_global));
if(IsTester)
{
int index=TesterFindIndexGlobal(name);
if(index==-1){
//Print(__FUNCTION__," no index count=",ArraySize(m_global));
return false;
}
_global newglobal[];
int inewsize=0;
int isize=ArraySize(m_global);
if(GlobalCopy(newglobal,m_global)>0)
{
isize=0;
ArrayResize(m_global,0); //переформируем структуру
inewsize=ArraySize(newglobal);
for(int i=0;i<inewsize;i++)
{
if(newglobal[i].name!=name)
{
// Print(newglobal[i].name," name=",name);
if(ArrayResize(m_global,isize+1)!=-1)
{
m_global[isize].name=newglobal[i].name;
m_global[isize].data=newglobal[i].data;
isize++;
}
}
}
//Print(__FUNCTION__," delete ok count=",ArraySize(m_global)," name=",name);
return true;
}
//Print(__FUNCTION__," no copy array count=",ArraySize(m_global));
return false;
}
return ::GlobalVariableDel(name);
}
вот если в этой функции функцию копирования GlobalCopy заменить на ArrayCopy то при копировании мне эта функция всегда выдает 0, а должна кол-во скопированных элементов массива.
Поэтмоу пришлось везде сделать вместо ArrayCopy свои функции работающие с копированием массив классов и структур. Но после этого непонятное увеличение массива прекратилось, удаление элементов из него заработало.
вот если в этой функции функцию копирования GlobalCopy заменить на ArrayCopy то при копировании мне эта функция всегда выдает 0, а должна кол-во скопированных элементов массива.
Поэтмоу пришлось везде сделать вместо ArrayCopy свои функции работающие с копированием массив классов и структур. Но после этого непонятное увеличение массива прекратилось, удаление элементов из него заработало.
У Вас операторы присваивания перегружены, о каком копировании может идти речь?! Говорю же, замените операторы на конструкторы. Выше лаконичное доказательство, что ArrayCopy отрабатывает идеально.
ок. тогда у меня везде где через = работать не будет(
ок. тогда у меня везде где через = работать не будет(
{
int j;
void operator=(STRUCT &s)
{
static int i = 0;
j = i;
i++;
}
};
//---
void OnStart()
{
STRUCT Array1[5], Array2[5];
Print(ArrayCopy(Array1, Array2));
}
попробовал ваш пример вот так записать и проверить виноват ли оператор, работает.
поэтому там чтото другое происходит, что эта функция не хочет работать у меня.
{
string name;
double data;
};
{
string name;
double data;
};
ну вот и объяснение почему у меня не копируются классы. Значит то решение которое я сделал сделано правильно, и arraycopy мне не подходит.