Erros, bugs, perguntas - página 1776

 

Erro de compilação

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

No Metatrader 4 Ajuda sobre o indicador iGator()

mode

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

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


e abaixo é um exemplo

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


Fonte de dados MODE_UPPER, compreendo que há um erro na ajuda

 

Erro de compilação (ou melhor, nenhuma mensagem de erro)

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

};
 

Encontrei dois erros ao processar o evento de clique do botão do rato.

1. manipulação do evento de clique da roda do rato em OnChartEvent(). A ideia é que a função gera o evento (id == CHARTEVENT_MOUSE_MOVE) quando o botão esquerdo do rato é clicado (com e sem segurar), o botão direito do rato (com e sem segurar), mas se a roda for clicada, o evento será gerado apenas quando a roda for segurada. Ou seja, se premir apenas a tecla do meio e a libertar imediatamente, o evento não será gerado!

2. Após processar o botão esquerdo do rato premir (sparam == "1") o evento sparam == "0" será gerado. Depois de clicar no botão direito do rato (sparam == "2"), por alguma razão o evento sparam == "0" não é gerado. Não deveriam todos os botões do rato ser manuseados da mesma maneira? Estou em silêncio quanto a clicar na roda, porque, como disse no ponto 1 - nenhum evento é gerado quando a roda é clicada.

Código de verificação:

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

Erro de compilação (ou melhor, nenhuma mensagem de erro)

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

};
na função f1, o estado do objecto A não é alterado, o estado da matriz dinâmica A::i1 é alterado, os elementos A::i1 não pertencem ao objecto A
na função f2, o estado do objecto A muda, porque a matriz A::i2 não é dinâmica - todos os seus elementos pertencem ao objecto A
 
Dratuti. Pergunta: Como posso enviar uma mensagem a um utilizador com o qual ainda não correspondi em navegadores móveis (andróide, maçã)? Procurei em vários dispositivos diferentes - em lado nenhum existe um botão "enviar uma mensagem", bem como "adicionar a outros". A página do utilizador é algo parecido com isto, não há botões:
 

Erro de compilação

class A {};
class B {
        int A() { return 0; }
        void f( int ) {}
        void g() { f(A()); } //Error: 'A' - invalid cast operation
};
 
Andrey Sokolov:
Dratuti. Pergunta: como enviar uma mensagem a um utilizador com o qual ainda não correspondi em navegadores móveis (andróide, maçã)? Já procurei em vários dispositivos diferentes - em lado nenhum existe um botão "enviar uma mensagem", bem como "adicionar a outros". A página do utilizador parece algo parecido com isto, sem botões:

Há muito tempo que venho dizendo que, até agora, não disseram nada.

 
Alexey Kozitsyn:

Encontrei dois erros no tratamento de eventos com o botão do rato.


Vamos verificar.
 
Alexander:
Verificar.

Obrigado, por favor verifique o número da primeira barra visível no gráfico: ChartGetInteger( 0, CHART_FIRST_VISIBLE_BAR );

A questão é que se desactivar a rolagem do gráfico e monitorizar a última barra visível, então no momento de uma nova vela o seu número muda por alguma razão, embora o gráfico não se mova! A TF é M1 a fim de poder verificar mais rapidamente. Comece a partir do 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;
        }
   }