Изучаем и пишем вместе на MQL5 - страница 33

 

Надо перенести инициализацию в список инициализации.

В объявлении можно инициализировать по хорошему только статические интегральные константы (по кр. мере в С++, в MQL5 не знаю пока :) )

 
Еще один вопрос, последний. В чем причина того, что "" и NULL для строк не эквивалентны?
 
Interesting:

Кстати о птичках.

И что нам на это ответит компилятор. А ответит от он следующее - '=' - illegal assignment use

Компилятор был не преклонен - '=' - illegal assignment use.

У меня вопрос - А что будет если программер (в данном случае я) не позаботится об инициализации переменных до их использования (поступив так как того требует компилятор и упустив этот момент в конструкторе)?


правильно инициализировать члены структур/классов в конструкторе(ах):

//Struct StrMQL4_Deal
struct StrMQL4_Deal
{
//----------------------------------------------------------------------------//
double TP;
double SL;
//----------------------------------------------------------------------------//
StrMQL4_Deal():TP(0),SL(0) { }
StrMQL4_Deal(double tp,double sl):TP(tp),SL(sl) { }
};
 
TheXpert:
Еще один вопрос, последний. В чем причина того, что "" и NULL для строк не эквивалентны?
NULL означает строка не распределена, а "" строка распределена и имеет значение.
 
mql5:

правильно инициализировать члены структур/классов в конструкторе(ах):

Да я это больше года назад понял, по крайней мере начиная с 2010 года так и делаю.
 
Interesting:
Да я это больше года назад понял, по крайней мере начиная с 2010 года так и делаю.

Вы не могли это делать правильно с 2010 года, т.к. список инициализации ввели совсем недавно :) .

mql5:

NULL означает строка не распределена, а "" строка распределена и имеет значение.

Ладно, сформулирую по-другому. В чем смысл вводить пользователю состояние строки "не распределена"? Это можно как-то употребить с пользой или просто костыль?
 
TheXpert:
Вы не могли это делать правильно с 2010 года, т.к. список инициализации ввели совсем недавно :) .
имел ввиду в конструкторе.
 
TheXpert:

Вы не могли это делать правильно с 2010 года, т.к. список инициализации ввели совсем недавно :) .


Я имел введу инициализацию в конструкторе класса, а объявление в виде

//----------------------------------------------------------------------------//
double TP;
double SL;
//----------------------------------------------------------------------------//
Точно не помню, но с объектами я стал работать в начале 2010 года (первый квартал, точно не скажу; а искать исходники муторно). До этого занимался библиотеками и изучением основ MQL5 (верней занимался вопросами связанными с миграцией на MQL5).
 
Rosh:
Делаете перегрузку функции на разные типы данных в массиве.
Спс, понятно. Значит, универсального способа нет. Вопрос возник потому, что при перегрузке появляются одинаковые функции со всего одним(!) различием - в заголовке функции, когда необходимо указать тип массива. Не совсем изящно, но что поделаешь, так и оставлю. Надеялся, что есть выход, как в Справочнике.
 

Вот такой простенький скрипт выдаёт непонятный для меня результат

void OnStart()
  {
   for(uchar u=120;u<136;u++)
     {
       switch(u>254)
        {
          case  true: Print(u,">254 - true");  break;
          case false: Print(u,">254 - false"); break;
        }
     }
  }

Может, кто-нибудь сможет объяснить, в чём причина? Когда число 254 приводишь явно к типу uchar, - работает, как задумано.