Если верить доке, массив при создании заполняется объектами, созданными конструктором_по_умолчанию.
А конструктор по умолчанию создаётся автоматически, если не объявлен ни один конструктор.Если верить доке, массив при создании заполняется объектами, созданными конструктором_по_умолчанию.
А конструктор по умолчанию создаётся автоматически, если не объявлен ни один конструктор.Как тогда заполнить массив объектами, которые созданны другим конструктором?
Ну, кроме очевидного:
Test vTest(Qty); for (int i=0; i<Qty; i++) mArray[i] = vTest;
Допустим, у меня параметры конструктора в цикле меняются, и мне объекты нужно создавать именно в цикле...
Как тогда заполнить массив объектами, которые созданны другим конструктором?
Ну, кроме очевидного:
Допустим, у меня параметры конструктора в цикле меняются, и мне объекты нужно создавать именно в цикле...
Вы хотите определять тип объекта в цикле и создавать массивы объектов этих типов?
Массив заполняется объектами при вызове строки "ArrayResize(mArray, Qty);". Дальше нужно только объекты как-то проинициализировать. Например:
#property strict class Test { public: int a; double b[]; public: Test() : a(0) {} void Init(int q) { a = q; ArrayResize(b, q); } }; Test mArray[]; void OnStart() { int Qty = 5; ArrayResize(mArray, Qty); for (int i = 0; i < Qty; i++) mArray[i].Init(Qty); for (int i = 0; i < Qty; i++) PrintFormat("mArray[%d].a=%d, mArray[%d].ArraySize(b)=%d", i, mArray[i].a, i, ArraySize(mArray[i].b)); }
Объекты сами создаются и удаляется при вызове ArrayResize():
class Test { public: double b[]; public: Test(){ Print("constr"); } ~Test(){ Print("destr"); } }; Test mArray[]; void OnStart(){ int Qty = 5; ArrayResize(mArray,3); ArrayResize(mArray,0); ArrayResize(mArray,5); }
И по завершению работу удаляются.
Добрый день.
Подскажите, как заполнить массив объектами:
Код вылетает с ошибками:
'Test' - invalid cast operation TestClass.mq5 34 19
'Test' - parameter passed as reference, variable expected TestClass.mq5 34 19
'operator=' - object required TestClass.mq5 34 17
class Test { public: int a; double b[]; public: Test() : a(1){} Test( int& aQty ); Test( const Test& other ); void operator=( const Test& other ); }; Test::Test( int& aQty ) : a( aQty ) { ArrayResize( b, aQty ); } Test::Test( const Test& other ) : a( other.a ) { ArrayCopy( b, other.b ); } void Test::operator=( const Test& other ) { if( &other != &this ){ a = other.a; ArrayCopy( b, other.b ); } } Test mArray[]; void OnStart() { int Qty = 5; ArrayResize( mArray, Qty ); for( int i = 0; i < Qty; i++ ){ Test test( Qty ); mArray[i] = test; } }
Понятно!
Спасибо большое!

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день.
Подскажите, как заполнить массив объектами:
Код вылетает с ошибками:
'Test' - invalid cast operation TestClass.mq5 34 19
'Test' - parameter passed as reference, variable expected TestClass.mq5 34 19
'operator=' - object required TestClass.mq5 34 17