Помогите по коду. Простой пример с классами в mql4.

 

Вот самодостаточный кусок моего кода:

class SignalClass
{
   private:
   datetime          time;
   string            result;
   
   public:
   SignalClass(void);
   SignalClass(datetime _time, string _result)
   {
      time=_time;
      result=_result;
   };
   
   datetime GetTime() {return time;}
   string GetResult() {return result;}
};

SignalClass signalsArr[];

// как сделать правильно этот метод?
void ArrayPush(SignalClass &arr[],SignalClass &value)
{
   int count = ArraySize(arr); 
   int count_new = ArrayResize(arr, ++count);
   arr[count_new-1] = value;						// <-- ОШИБКА КОМПИЛЯЦИИ: '=' - not allowed for objects with protected members or inheritance
}									// т.е я понял что проблема с присваиванием объектов, но не знаю как её исправить

 Вылетает ошибка на строчке с присваиванием в методе ArrayPush. Помогите разобраться.

P.S: С классами до этого не работал, с указателями знаком очень смутно, статьи по классам и структурам на docs.mql4.com читал, но все равно не понял как сделать правильно. 
       Спасибо заранее за любую помощь. 

 
И я "с классами до этого не работал", как и со структурами, но не вижу необходимости в них. Всё прекрасно работает и без них. Излишние нагромождения и досадные ошибки и предупреждения! Если разработчики сделали бы автоматический перевод с мкл4 на мкл4+, тогда с удовольствием проверил бы действительное преимущество, а так нет никакого желания напрягаться без смысла.  
 
borilunad:
И я "с классами до этого не работал", как и со структурами, но не вижу необходимости в них. Всё прекрасно работает и без них. Излишние нагромождения и досадные ошибки и предупреждения! Если разработчики сделали бы автоматический перевод с мкл4 на мкл4+, тогда с удовольствием проверил бы действительное преимущество, а так нет никакого желания напрягаться без смысла.  
Опять эти бессмысленные телодвижения... Борис, скажи честно, ты за мою внучку болеешь, или за каталонку какую-нить? 
 

Нужно определить operator=() и конструктор копирования.

class SignalClass
{
private:
   datetime          time;
   string            result;
   
public:
   SignalClass(void);
   SignalClass(datetime _time, string _result)
   {
      time=_time;
      result=_result;
   };
   
   SignalClass( const SignalClass& other ) : time( other.time ), result( other.result )
   {
   }
   
   datetime GetTime() const {return time;}
   string GetResult() const {return result;}
   
   void operator=( const SignalClass& other )
   {
      time = other.time;
      result = other.result;
   }
};
 

А почему ++count а не count++

Да и вообще, мне кажется в таких случаях ++ не работает. Лучше писать count+1


 

borilunad:
И я "с классами до этого не работал", как и со структурами, но не вижу необходимости в них. Всё прекрасно работает и без них. Излишние нагромождения и досадные ошибки и предупреждения! Если разработчики сделали бы автоматический перевод с мкл4 на мкл4+, тогда с удовольствием проверил бы действительное преимущество, а так нет никакого желания напрягаться без смысла.   

Так а как тут обойтись без структур или классов, если мне надо, скажем, держать массив из объектов (в каждом объекте по 2-3 поля). Если есть какой-то другой вариант, я с удовольствием рассмотрю его.
 
AlexeyVik:

А почему ++count а не count++

Да и вообще, мне кажется в таких случаях ++ не работает. Лучше писать count+1


Работает и count++ и ++count и count+1. И в данном конкретном случае вообще разницы нет, писать count++ или ++count
 
Ko1dun:

Нужно определить operator=() и конструктор копирования.

Cпасибо огромное, Ko1dun! Код компилируется.
 
iJSmile:
Работает и count++ и ++count и count+1. И в данном конкретном случае вообще разницы нет, писать count++ или ++count

В данном конкретном случае count++ будет работать не так как Вы ожидаете.

 
Ko1dun:

В данном конкретном случае count++ будет работать не так как Вы ожидаете.

Нажал кнопку "Ответить" и ответив быстро Алексею, толком не задумался над тем что пишу. Да, признаю свою ошибку, в этом конкретном случае count++ не сработает, вылетит out of bound эксэпшн. Собственно, отвечая Алексею (AlexeyVik), поэтому я и написал ++count, чтобы уж точно оградить себя от подобного рода сюрпризов во время работы скрипта.

А Вам, колдун, еще раз спасибо. Все работает как часы.
 

Ну раз уж меня опять упомянули, тогда-уж объясните отличия ++count от count++

Я совершенно не знаком с языком С и небыло необходимости изучать разновидности этого языка, потому и не знаю. А теперь уже поздно браться за учебники...

Например можно-ли так написать в цикле и будет-ли работать как и задумано. Или как будет работать в счётчике.

Причина обращения: