Здравствуйте! Помогите разобраться как правильно удалять элемент из массива экземпляров класса*
К примеру есть массив классов из 5 элементов
далее я хочу удалить к примеру второй элемент этого массива
далее по логике я должен уменьшить размер этого массива
Потом я должен сместить все элементы значения массива влево, как это делается c обычными массивами при помощи ArrayCopy(), но в справке пишется что копировать классы нельзя.
В итоге получается ошибка - invalid pointer access in ....!
т.е. обьект удаляется, но остается дырка в массиве).
Вопрос - как правильно удалить элемент массива экземпляров класса?
Использовать CList из стандартной библиотеки вместо массива
Использовать CList из стандартной библиотеки вместо массива
Спасибо! Попытаюсь понять как это сделать)
Здравствуйте! Помогите разобраться как правильно удалять элемент из массива экземпляров класса*
К примеру есть массив классов из 5 элементов
далее я хочу удалить к примеру второй элемент этого массива
далее по логике я должен уменьшить размер этого массива
Потом я должен сместить все элементы значения массива влево, как это делается c обычными массивами при помощи ArrayCopy(), но в справке пишется что копировать классы нельзя.
В итоге получается ошибка - invalid pointer access in ....!
т.е. обьект удаляется, но остается дырка в массиве).
Вопрос - как правильно удалить элемент массива экземпляров класса?
#include <Arrays\List.mqh> //--- CList *cname=new CList; //--- if(cname==NULL) { printf("Object create error"); return; } //--- add 5 elements for(int i=0;i<5;i++) { if(cname.Add(new CName)==-1) { printf("Element addition error"); delete cname; return; } } //--- use cname //--- . . . //---удалить к примеру второй элемент if(!cname.Delete(1)) { printf("Delete error"); delete cname; return; } //--- CList сам следит за отсутствием "дырок в массиве" //--- delete cname delete cname;
Посмотрите подробнее здесь
ЗЫ: пока писал - уже ответили
у меня выдает ошибку 'CName' - declaration without typе, и еще не могу понять где и как мне подставить свой массив экземпляров обьектов?
Извините, только учусь..
Я так понимаю CName - это мой класс и в нем я должен указать унаследование от CList - может так понимать это?
Потом я должен сместить все элементы значения массива влево, как это делается c обычными массивами при помощи ArrayCopy(), но в справке пишется что копировать классы нельзя.
По идее, в последнем билде должно просто копироваться. Тут писали в пункте 8:
"MQL5: Добавлена автоматическая генерация
неявного оператора копирования для объектов структур и классов. Теперь
компилятор автоматически создает операторы копирования, что позволяет
писать для объектов простые записи вида b=a:"
По идее, в последнем билде должно просто копироваться. Тут писали в пункте 8:
"MQL5: Добавлена автоматическая генерация
неявного оператора копирования для объектов структур и классов. Теперь
компилятор автоматически создает операторы копирования, что позволяет
писать для объектов простые записи вида b=a:"
Я работаю на платформе робофорекса, а у них почему то версия MetaTrader 5 build 1596, а новый билд версии MetaTrader 5 build 1625
Надо удалить объект (delete), сдвинуть массив, и после этого уменьшить размер массива (а не уменьшить размер массива и сдвинуть).
Надо удалить объект (delete), сдвинуть массив, и после этого уменьшить размер массива (а не уменьшить размер массива и сдвинуть).
Так вот вопрос - как сдвинуть? ArrayCopy() для классов не работает
к примеру есть массив обьектов Arr.
MyClass* Arr[5];
В нем нужно удалить к примеру второй элемент. предложили использовать CList, но я не понял как его использовать
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте! Помогите разобраться как правильно удалять элемент из массива экземпляров класса*
К примеру есть массив классов из 5 элементов
далее я хочу удалить к примеру второй элемент этого массива
далее по логике я должен уменьшить размер этого массива
ArrayResize(cname,4);
Потом я должен сместить все элементы значения массива влево, как это делается c обычными массивами при помощи ArrayCopy(), но в справке пишется что копировать классы нельзя.
В итоге получается ошибка - invalid pointer access in ....!
т.е. обьект удаляется, но остается дырка в массиве).
Вопрос - как правильно удалить элемент массива экземпляров класса?
P.S.
Создается массив обьектов типа класс и потом я работаю с этим массивом и в процессе мне к примеру нужно удалить определенный элемент этого массива и работать дальше с этим массивом как я работал до этого.