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

 
A100 #:

Так тоже непорядок:

Да, нет проверки на наличие имени макроса и его корректность.

 
A100 #:
В последнем build 3902 появилась какая то трудноуловимая ошибка при компиляции - если параметрический макрос расположен много раньше применения то выдается какая то несуществующая абсурдная ошибка, а если его продублировать непосредственно перед применением, то все нормально - не смог с ходу разобраться

Дело не в конкретном макросе, а в его порядковом номере, т.е. почти любой параметрический макрос с определенным порядковым номером будет вызывать ошибку при компиляции - выглядит это примерно так:

/*
. . . 
*/
#define MACRO555(X) int X;
#define MACRO666(X) int X;
/*
. . .
*/
MACRO555(i) //нормально
MACRO666(j) //Error: 'j' - unexpected token, probably type is missing?
            //       'X' - semicolon expected

Соответственно при дублировании макроса его порядковый номер смещался и проблема завуалировалась

 

Ну что я делаю не так?

#include <Canvas\Charts\LineChart.mqh>
void OnStart()
  {
   CLineChart chart;
   if(!chart.CreateBitmapLabel("Line Chart", 30, 30, 600, 450))
     {
      Print("Error creating line chart: ", GetLastError());
      return;
     }

   double arr[] = {1, 9, 1};
   double max = 0, min = DBL_MAX;
   for(int i = 0; i < ArraySize(arr); i++)
     {
      if(max < arr[i])
         max = arr[i];
      if(min > arr[i])
         min = arr[i];
     }

   chart.VScaleParams(max, min, 3);
   chart.ShowGrid(0);
   chart.ShowScaleBottom(true);
   chart.ShowScaleTop(true);
   chart.ShowScaleRight(true);
   chart.ShowScaleLeft(true);
   chart.SeriesAdd(arr);

   while(!IsStopped())
      Sleep(200);
   chart.Destroy();
  }

Получаю 

Почему линии начинаются не с 1 и выходят за пределы рисунка???

 
Aleksandr Slavskii #:

Почему линии начинаются не с 1 и выходят за пределы рисунка???

Количество необходимых вычислений можно оценить по исходнику этой функции.

//+------------------------------------------------------------------+
//| Calculate boundaries for workspace                               |
//+------------------------------------------------------------------+
void  CGraphic::CalculateBoundaries(void)
 
A100 #:
В последнем build 3902 появилась какая то трудноуловимая ошибка при компиляции - если параметрический макрос расположен много раньше применения то выдается какая то несуществующая абсурдная ошибка, а если его продублировать непосредственно перед применением, то все нормально - не смог с ходу разобраться

Проверил - эта ошибка и раньше была, а в build 3902 проявилась по совпадению - удалил пару неиспользуемых макросов и порядковый номер макроса, на котором возникает ошибка сместился с неиспользуемого на используемый макрос

 
fxsaber #:

Количество необходимых вычислений можно оценить по исходнику этой функции.

Не понял, я не нашёл CGraphic в родителях LineChart.mqh.

А при чём тут количество вычислений?

Ваш ответ слишком краткий, для моего понимания. Сделайте его пожалуйста чуть чуть более развёрнутым.

 
Aleksandr Slavskii #:

Не понял, я не нашёл CGraphic в родителях LineChart.mqh.

А при чём тут количество вычислений?

Ваш ответ слишком краткий, для моего понимания. Сделайте его пожалуйста чуть чуть более развёрнутым.

Сравнил исходники обеих библиотек. Такое ощущение, что в самой LineChart слишком мало вычислений. Будто не дописана до рабочего состояния.

 
A100 #:

Проверил - эта ошибка и раньше была, а в build 3902 проявилась по совпадению - удалил пару неиспользуемых макросов и порядковый номер макроса, на котором возникает ошибка сместился с неиспользуемого на используемый макрос

Без воспроизведения поправить не смогут, наверное.

 
fxsaber #:

Сравнил исходники обеих библиотек. Такое ощущение, что в самой LineChart слишком мало вычислений. Будто не дописана до рабочего состояния.

Понятно. Спасибо. Я то думал это я делаю, что то не так.

Читал статью "Статистические распределения вероятностей в MQL5", код там немного устарел, чуть чуть поправил-заработало,

а вот выбранный способ визуализации у меня не захотел работать, вот и решил по быстренькому сделать визуализацию с помощью  LineChart.mqh,

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

 
fxsaber #:

Без воспроизведения поправить не смогут, наверное.

Простого кода не смог вычленить

Еще особенность: перед проблемным макро должно быть макро с вычислением и обязательно в скобках, например так:

/*
. . . 
*/
#define MACRO665        (1+1)
#define MACRO666(X) int X;
MACRO666(j) //Error: 'j' - unexpected token, probably type is missing?
            //       'X' - semicolon expected