Errores, fallos, preguntas - página 1776

 

Error de compilación

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 );
}
 

En la Ayuda de Metatrader 4 sobre el indicador iGator()

mode

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

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


y a continuación un ejemplo

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


Fuente de datos MODE_UPPER, entiendo que hay un error en la ayuda

 

Error de compilación (o más bien ningún mensaje de error)

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

};
 

He encontrado dos errores al procesar el evento de clic del botón del ratón.

1. Manejo del evento de clic de la rueda del ratón en OnChartEvent(). La idea es que la función genere el evento (id == CHARTEVENT_MOUSE_MOVE) cuando se pulse el botón izquierdo del ratón (con y sin mantenerlo), el botón derecho del ratón (con y sin mantenerlo), pero si se pulsa la rueda, el evento se generará sólo al mantenerla. Es decir, si se pulsa la tecla central y se suelta inmediatamente, no se generará el evento.

2. Tras procesar la pulsación del botón izquierdo del ratón (sparam == "1") se generará el evento sparam == "0". Después de pulsar el botón derecho del ratón (sparam == "2"), por alguna razón no se genera el evento sparam == "0". ¿No deberían manejarse todos los botones del ratón de la misma manera? No digo nada acerca de hacer clic en la rueda, porque, como he dicho en el punto 1 - no se genera ningún evento cuando se hace clic en la rueda.

Comprueba el código:

#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:

Error de compilación (o más bien ningún mensaje de error)

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

};
en la función f1, el estado del objeto A no cambia, el estado de los elementos del array A::i1 cambia, los elementos A::i1 no pertenecen al objeto A
en la función f2, el estado del objeto A cambia, porque el array A::i2 no es dinámico - todos sus elementos pertenecen al objeto A
 
Dratuti. Pregunta: ¿Cómo puedo enviar un mensaje a un usuario con el que aún no he mantenido correspondencia en los navegadores móviles (android, apple)? He mirado desde varios dispositivos diferentes - en ninguna parte hay un botón "enviar un mensaje", así como "añadir a otros". La página del usuario se ve algo así, sin botones:
 

Error de compilación

class A {};
class B {
        int A() { return 0; }
        void f( int ) {}
        void g() { f(A()); } //Error: 'A' - invalid cast operation
};
 
Andrey Sokolov:
Dratuti. Pregunta: ¿cómo puedo enviar un mensaje a un usuario con el que aún no he mantenido correspondencia en los navegadores móviles (android, apple)? He mirado desde varios dispositivos diferentes - en ninguna parte hay un botón "enviar un mensaje", así como "añadir a otros". La página del usuario se ve algo así, sin botones:

Llevo mucho tiempo diciéndolo. Hasta ahora no han dicho nada.

 
Alexey Kozitsyn:

Se han encontrado dos errores en el manejo de eventos del botón del ratón.


Vamos a comprobarlo.
 
Alexander:
Compruébalo.

Gracias, por favor compruebe el número de la primera barra visible en el gráfico: ChartGetInteger( 0, CHART_FIRST_VISIBLE_BAR );

La cuestión es que si se desactiva el desplazamiento del gráfico y se controla la última barra visible, en el momento de una nueva vela su número cambia por alguna razón, ¡aunque el gráfico no se mueve! El TF es M1 para poder comprobarlo más rápidamente. Empieza por el indicador:

#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;
        }
   }