Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
iJSmile
197
iJSmile 2015.11.11 20:34 

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

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 читал, но все равно не понял как сделать правильно. 
       Спасибо заранее за любую помощь. 

Boris
3896
Boris 2015.11.11 21:44  
И я "с классами до этого не работал", как и со структурами, но не вижу необходимости в них. Всё прекрасно работает и без них. Излишние нагромождения и досадные ошибки и предупреждения! Если разработчики сделали бы автоматический перевод с мкл4 на мкл4+, тогда с удовольствием проверил бы действительное преимущество, а так нет никакого желания напрягаться без смысла.  
Алексей Тарабанов
7279
Алексей Тарабанов 2015.11.11 23:17  
borilunad:
И я "с классами до этого не работал", как и со структурами, но не вижу необходимости в них. Всё прекрасно работает и без них. Излишние нагромождения и досадные ошибки и предупреждения! Если разработчики сделали бы автоматический перевод с мкл4 на мкл4+, тогда с удовольствием проверил бы действительное преимущество, а так нет никакого желания напрягаться без смысла.  
Опять эти бессмысленные телодвижения... Борис, скажи честно, ты за мою внучку болеешь, или за каталонку какую-нить? 
Koldun Zloy
246
Koldun Zloy 2015.11.12 02:07  

Нужно определить 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;
   }
};
Alexey Viktorov
7769
Alexey Viktorov 2015.11.12 05:20  

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

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


iJSmile
197
iJSmile 2015.11.12 18:01  

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

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

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

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


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

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

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

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

iJSmile
197
iJSmile 2015.11.13 21:47  
Ko1dun:

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

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

А Вам, колдун, еще раз спасибо. Все работает как часы.
Alexey Viktorov
7769
Alexey Viktorov 2015.11.14 07:30  

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

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

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

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий