можно заменить string на uchar s1[10], будет работать)
Да, не копируется. Самому копировать в цикле поэлементно.
Вообще задача - нужно удалить элемент массива, где тип массива структуры, в которых есть стринговый элемент-может есть какой другой способ?
//+------------------------------------------------------------------+ //| Test.mq5 | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property indicator_chart_window //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ struct A { int i1; bool b1; uchar s1[10]; double d1; datetime t1; }; A Arr[]; int OnInit() { //--- indicator buffers mapping //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- static int k=0; if (k==0) { ArrayResize(Arr,5); for(int i=0;i<5;i++) { Arr[i].b1=true; Arr[i].d1=double(i); Arr[i].i1=i; //Arr[i].s1[]=string(i); StringToCharArray(string(i),Arr[i].s1); Print(CharArrayToString(Arr[i].s1)); Arr[i].t1=time[i]; } ArrayCopy(Arr,Arr,3,2); Print(Arr[0].i1," - ",Arr[1].i1," - ",Arr[2].i1," - ",Arr[3].i1," - ",Arr[4].i1); k++; } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
Taras Slobodyanik:
Спасибо! то что надо!)
Tango_X:
Вообще задача - нужно удалить элемент массива, где тип массива структуры, в которых есть стринговый элемент-может есть какой другой способ?
Вообще задача - нужно удалить элемент массива, где тип массива структуры, в которых есть стринговый элемент-может есть какой другой способ?
Массив указателей
Для
Dmitry Fedoseev:
Для меня это темный лес)
Массив указателей
Tango_X:
ДляДля меня это темный лес)
ДляДля меня это темный лес)
Тогда напишите свою функцию копирования массива, в функции цикл, копирование поэлементно, и вызывайте ее вместо обычной функции ArrayCopy(). 30 минут работы, а дальше все как обычно.
Или подумайте, а так ли нужны строковые переменные в структуре.
Dmitry Fedoseev:
Я так и сделал, а строки нужны в структуре
Тогда напишите свою функцию копирования массива, в функции цикл, копирование поэлементно, и вызывайте ее вместо обычной функции ArrayCopy(). 30 минут работы, а дальше все как обычно.
Или подумайте, а так ли нужны строковые переменные в структуре.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте! Не получается копировать структуры с помощью ArrayCopy(), а именно когда в структуре есть элемент с типом string. Если копирую структуры без переменной string то все работает, как приведено ниже и результатом будет - 0 - 1 - 2 - 2 - 3, но только если использовать переменную типа string (в коде она закомментирована) то данные не копируются и результатом будет - 0 - 1 - 2 - 3 - 4. В справке по функции ArrayCopy пишется что "Массивы классов и структур, содержащих объекты, требующие инициализации, не копируются. Массив структур можно скопировать только в массив того же самого типа." Может я не так понимаю справку, тогда как решить этот вопрос?