错误、漏洞、问题 - 页 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对象。
 
Dratuti。问题:我怎样才能在移动浏览器(安卓、苹果)上向尚未通信的用户发送消息?我从几个不同的设备上看了看--没有任何地方有 "发送消息 "的按钮,以及 "添加到其他人"。用户的页面看起来像这样,没有按钮。
 

编译错误

class A {};
class B {
        int A() { return 0; }
        void f( int ) {}
        void g() { f(A()); } //Error: 'A' - invalid cast operation
};
 
Andrey Sokolov:
Dratuti。问题:我如何在移动浏览器(安卓、苹果)上向尚未通信的用户发送消息?我从几个不同的设备上看了一下--没有任何地方有 "发送消息 "的按钮,以及 "添加到其他人"。用户的页面看起来像这样,没有按钮。

我已经说了很久了。到目前为止,他们还没有说什么。

 
Alexey Kozitsyn:

在鼠标按钮事件处理 中发现两个错误。


让我们检查一下。
 
Alexander:
检查。

谢谢你,请检查图表上第一个可见条形的数目:ChartGetInteger( 0,CHART_FIRST_VISIBLE_BAR)。

问题是,如果你禁止图表滚动,并监测最后一个可见的条形图,那么在一个新的蜡烛的时刻,它的数字因某种原因而改变,尽管图表没有移动TF是M1,以便能够更快地检查。从指标开始。

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