Ошибки, баги, вопросы - страница 2046

 
Alexey Navoykov:

Неконстантным выражением.

Вы ничего не путаете?

Более того, глобальные и статические переменные ведут себя абсолютно идентично.  Вот из документации:

Признаюсь, для меня это было таким же открытием, как и со статическими переменными.  Уж не знаю, когда это всё появилось в документации, а может и было раньше, просто никто не обращал внимания, т.к. по факту всё работало как в C++, потому вопросов не возникало. 

Мне кажется что вы абсолютно заблуждаетесь. Как можно говорить об идентичности переменных, если одни доступны из всех функций, определенных в программе, а другие только в той функции в которой они объявлены.

А вот отличие статических переменных и локальных состоит в том, что статические инициализируются сразу после глобальных, а обычные локальные, (не статические) по мере выполнения программы, тогда когда до них доходит выполнение кода.

 
Alexey Viktorov:

Мне кажется что вы абсолютно заблуждаетесь. Как можно говорить об идентичности переменных, если одни доступны из всех функций, определенных в программе, а другие только в той функции в которой они объявлены.

Речь шла о конкретном контексте обсуждения (инициализация переменной), а не вообще. 

 
После отправки сообщений через полноценный чат не происходит автодобавление отправленного сообщения в историю переписок на текущей странице.
Отправленное сообщение появляется только после перезагрузки страницы.

На вскидку, ответ от сервера при отправке сообщения приходит адекватный, возможно что-то поплыло в обработчиках событий в js кодах.
 
Alexey Navoykov:

Речь шла о конкретном контексте обсуждения (инициализация переменной), а не вообще. 

На сколько я помню речь шла об инициализации СТАТИЧЕСКОЙ переменной

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Alexey Navoykov, 2017.10.17 17:16

Баг с инициализацией статических переменных.  В старых билдах его не было.

class A
{
 public:
  static int f()
  { 
    static int a=1;
    Print(a);       // Получаем a=0 !!
    return a;  
  }   
};


int a= A::f();


void OnStart()
  {
   
  }

Кому не трудно, отравьте это в сервис-деск.  У меня больше нет желания общаться с ними там.


Или это не ваше сообщение?

Разберитесь уже с последовательностью инициализации переменных. В этом примере сначала инициализируется переменная глобального уровня

int a= A::f();

которая вызывает функцию в которой ещё не инициализирована одноимённая переменная

static int a=1;

и о чём вообще можно говорить если вы не обращаете внимания на предупреждения компилятора...


 
Alexey Navoykov:

Правда я там размерность массива не ту поставил, может это повлияло как-то (хотя не должно никак влиять).

Попробуйте вот с размерностью = 3

Спасибо за сообщение.
Действительно, это ошибка оптимизатора компилятора, исправлено.
Исправление войдёт в следующий билд.
 
Alexey Viktorov:

На сколько я помню речь шла об инициализации СТАТИЧЕСКОЙ переменной

Или это не ваше сообщение?

Не понимаю, чего вы хотите.  Я ж сказал, речь шла об "инициализации переменных". И в этом контексте статические и глобальные переменные ведут себя идентично.  Я вам даже ссылку давал на документацию: инициализация переменной

Обратите внимание, что статические и глобальные переменные там везде объединены вместе.

А последовательность инициализаций мы не осуждаем, ибо она не имеет отношения к рассматриваемой проблеме.  Напомню, что проблема заключается в том, что компилятор НЕ выдаёт ошибку там, где должен. Если статическая переменная ещё неинициализирована, то к ней нельзя обращаться.

и о чём вообще можно говорить если вы не обращаете внимания на предупреждения компилятора...

Ну поменяйте имя глобальной переменной, если вас это так смущает.  На результат это никак не повлияет.

 
Alexey Navoykov:

Не понимаю, чего вы хотите.  Я ж сказал, речь шла об "инициализации переменных". И в этом контексте статические и глобальные переменные ведут себя идентично.  Я вам даже ссылку давал на документацию: инициализация переменной

Обратите внимание, что статические и глобальные переменные там везде объединены вместе.

А последовательность инициализаций мы не осуждаем, ибо она не имеет отношения к рассматриваемой проблеме.  Напомню, что проблема заключается в том, что компилятор НЕ выдаёт ошибку там, где должен. Если статическая переменная ещё неинициализирована, то к ней нельзя обращаться.

Ну поменяйте имя глобальной переменной, если вас это так смущает.  На результат это никак не повлияет.

Здрасте, приехали...Сам-то читал по этой ссылке???

Я кроме mql знаю, так-же не очень хорошо, только VBA и только там встречал директиву обязательной инициализации переменных. Заметьте, что применяется исключительно на усмотрение программиста. А вы хотите чтобы MQ принудительно заставили инициализировать абсолютно все переменные??? А последовательность инициализации менять по каждой претензии со стороны таких пользователей? Вам дали возможность отойти от правил, понимая ЧТО вы делаете, а вы просите исключить такую возможность???

Создаётся такое впечатление, что вы просто выискиваете к чему-бы придраться и охаять язык mql. Уберите static у переменной в классе и будет вам счастье.

 

Что происходит в момент переполнения системной переменной, которую получаем по GetTickCount() ?

Есть какая-то стандартная реакция со стороны терминала?

Есть ли необходимость программно отслеживать этот момент и внедрять реакцию?

 
Alexey Viktorov:

Здрасте, приехали...Сам-то читал по этой ссылке???

Я кроме mql знаю, так-же не очень хорошо, только VBA и только там встречал директиву обязательной инициализации переменных. Заметьте, что применяется исключительно на усмотрение программиста. А вы хотите чтобы MQ принудительно заставили инициализировать абсолютно все переменные???

Ну вот в этом и кроется причина.  Вы мало того, что знаете не очень хорошо (и сами уже какой раз об этом говорите), так ещё и VBA, который имеет мало общего с данным языком.  А я довольно хорошо знаю C++.  Это очень чёткий и строгий язык, никакие вольности там не допускаются, которые вы себе тут нафантазировали.  И MQL был создан по образу и подобию C++.  Так что давайте прекращать это.  Ознакомьтесь с C++ для начала, тогда уже будет смысл о чём-либо спорить.

p.s. Кстати я только сейчас осознал, что вы изначально увели разговор в неправильном направлении, т.к. я уже забыл с чего всё началось, а сейчас снова увидел свой изначальный код и понял, что ваш первоначальный наезд вот здесь был вообще не по теме.  И как я сразу не обратил внимания!   В моём коде статическая переменная инциализируется именно константой, как и описано в документации. Так вот проблема в том, что она ни хрена не проинициализировалась.  А вы мне начали грузить, что мол потому что её надо инициализировать константой.  И пошло-поехало...

 

Почему я не могу инициализировать массив переменными? 

void (double a, double b,double c )

{

double inp[3]={a,b,c};   // компилятор ругается 'а' - constant expression required      

}