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

 

Ошибка при компиляции

template<typename T>
int f( const T& ) { return sizeof( T ); }
class A {};
void OnStart()
{
        const A * const a = new A; //Error: 'T' - unexpected token
        f( a );
}
 

В Справке Metatrader 4 про индикатор iGator() 

mode

[in]  Источник данных, идентификатор одной из линий индикатора. Mожет быть любой из следующих величин:

MODE_GATORJAW - синяя линия (линия челюсти аллигатора),
MODE_GATORTEETH - красная линия (линия зубов аллигатора),
MODE_GATORLIPS - зеленая линия (линия губ аллигатора).  


а внизу пример

double diff=iGator(NULL,0,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_UPPER,1);

 


Источник данных MODE_UPPER, я так понимаю ошибка в справке

 

Ошибка при компиляции (точнее отсутствие сообщения об ошибке)

class A {
        A() { ::ArrayResize( i1, 1 ); }
        int i1[ ];
        int i2[1];
        void f1() const { i1[0] = 0; } //нет сообщения ошибки
        void f2() const { i2[0] = 0; } //Error: 'i2' - member of the constant object cannot be modified

};
 

Нашел две ошибки при обработке события нажатия кнопок мыши.

1. Обработка нажатия колесика мыши в OnChartEvent(). Смысл в том, что функция генерирует событие (id == CHARTEVENT_MOUSE_MOVE) при нажатии левой кнопкой мыши (с удержанием и без удержания), правой кнопкой мыши (с удержанием и без удержания), а если нажать на колесико - то событие будет сгенерировано только при удержании. Т.е. если просто нажать на среднюю клавишу и сразу отпустить - событие не будет сгенерировано!

2. После обработки нажатия левой кнопки мыши (sparam == "1") генерируется событие sparam == "0". После нажатия на правую кнопку мыши (sparam == "2") почему-то событие sparam == "0" не генерируется. Разве не должны все кнопки мыши обрабатываться одинаково? Про нажатие на колесико я молчу, т.к., как я уже сказал в п.1 - при нажатии на колесико событие не генерируется.

Проверочный код:

#property indicator_chart_window
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Обработка события графика                                                                                                           |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
   switch(id)
     {
      case CHARTEVENT_MOUSE_MOVE:
         FuncMove(lparam,dparam,sparam);
         break;
     }
  }
//+------------------------------------------------------------------+
//| Функция обработки события перемещения мыши                                                          |
//+------------------------------------------------------------------+
void FuncMove(const long lparam,// Х координата
              const double dparam,// Y координата
              const string sparam          // Строковое значение статуса кнопки
              )
  {
   Print(__FUNCTION__,": sparam = "+sparam);
  }
//+------------------------------------------------------------------+
//| Функция деинициализации индикатора                                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- Отписываемся от события передвижения мыши
   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,false);
  }
//+------------------------------------------------------------------+


 

 
A100:

Ошибка при компиляции (точнее отсутствие сообщения об ошибке)

class A {
        A() { ::ArrayResize( i1, 1 ); }
        int i1[ ];
        int i2[1];
        void f1() const { i1[0] = 0; } //нет сообщения ошибки
        void f2() const { i2[0] = 0; } //Error: 'i2' - member of the constant object cannot be modified

};
в функции f1 состояние объекта A не меняется, меняется состояние элементов динамического массива A::i1, элементы A::i1 не входят в объект A
в функции f2 меняется состояние объекта A, т.к. массив A::i2 не динамический - все его элементы принадлежат объекту A
 
Дратути. Вопрос: как на браузерах моб платформ (андроид, эпл) отправить сообщение пользователю с которым еще не было переписки? Смотрел с нескольких разных устройств - нигде нет кнопки "отправить сообщение", как и "добавить в др." Страница  пользователя выглядит примерно так, кнопок нет:
 

Ошибка при компиляции

class A {};
class B {
        int A() { return 0; }
        void f( int ) {}
        void g() { f(A()); } //Error: 'A' - invalid cast operation
};
 
Andrey Sokolov:
Дратути. Вопрос: как на браузерах моб платформ (андроид, эпл) отправить сообщение пользователю с которым еще не было переписки? Смотрел с нескольких разных устройств - нигде нет кнопки "отправить сообщение", как и "добавить в др." Страница  пользователя выглядит примерно так, кнопок нет:

 

да я уже давно об этом говорил. пока молчат.  

 
Alexey Kozitsyn:

Нашел две ошибки при обработке события нажатия кнопок мыши.


Проверим.
 
Alexander:
Проверим.

Спасибо, проверьте еще, пожалуйста, номер первого видимого бара на графике: ChartGetInteger( 0, CHART_FIRST_VISIBLE_BAR ); 

Суть в том, что если отключить прокрутку графика, и мониторить последний видимый бар, то в момент образования новой свечи его номер, почему-то изменяется, хотя график не двигается! ТФ М1 для того, чтобы можно было быстрее проверить. Запуск из индикатора:

#property indicator_chart_window
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
   {
    //--- Подписываемся на событие движения мыши
         ChartSetInteger( 0, CHART_EVENT_MOUSE_MOVE, true );
         //---
    return(INIT_SUCCEEDED);
   }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
   {

    return(rates_total);
   }
//+------------------------------------------------------------------+
//| Обработка события графика                                        |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam)
   {
    switch( id )        
        {
         case CHARTEVENT_MOUSE_MOVE:
                 Print( __FUNCTION__," "+TimeToString( TimeCurrent(), TIME_DATE|TIME_SECONDS )+": sparam = "+sparam+", ",(int)ChartGetInteger( 0, CHART_FIRST_VISIBLE_BAR ));
                 break;
        }
   }


 

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