错误、漏洞、问题 - 页 1149

 
Contender:

否则。

string var1[1][2] = {{"dfdffd", "dfdfdfd"}}.

?

thanks....question removed.
 

问候尊敬的社区。

我在网站上找不到,我自己也半天没弄明白,为什么这个代码会写出错误。如果可以,请告诉我。

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//---
   string nameObject="testObject";
   ChartRedraw(0);
   ResetLastError();
   if(ObjectFind(0,nameObject)>=0){
      if(!ObjectDelete(0,nameObject)){
         if(_LastError>0){
            Print("1 Ошибка №",_LastError);
            ResetLastError();
         }
      }
   }
   ChartRedraw(0);
   if(_LastError>0){
      Print("2 Ошибка №",_LastError); // Тут ошибка №4202 <Графический объект не найден>
      ResetLastError();
   }
   if(!ObjectCreate(0,nameObject,OBJ_LABEL,0,0,0)){
      if(_LastError>0){
         Print("3 Ошибка №",_LastError);
         ResetLastError();
      }
   }else{
      ObjectSetInteger(0,nameObject,OBJPROP_CORNER,1);
   }
   if(_LastError>0){
      Print("4 Ошибка №",_LastError);
      ResetLastError();
   }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
svds75:

问候尊敬的社区。

我在网站上找不到,我自己也半天没弄明白,为什么这个代码会写出错误。如果可以,请告诉我。

为什么要删除该对象?
 
sergeev:
为什么要删除一个对象?
该计划实际上比这更复杂。我已经把它简化得不成比例,看看问题出在哪里。但我还没有搞清楚。
 
svds75:
该方案实际上更加复杂。我已经把它简化得不成比例,看看问题出在哪里。但我还是不明白。
试着理解为什么只有一条信息,而不是每个勾都 有,那么就不会有问题了。
 
svds75:
实际上,该方案更为复杂。我已经把它简化得不成比例,看看问题出在哪里。但我还是不明白。

从代码的风格来看,它仍然可以被简化。

也许我在if/else中混淆了?

 
svds75:

问候尊敬的社区。

我在网站上找不到,我自己也半天没弄明白,为什么这个代码会写出错误。如果可以,请告诉我。

在这种布局 下,代码 的可读性更好,而且错误也能立即看到。

//---
   string nameObject="testObject";
   ChartRedraw(0);
   ResetLastError();
   if(ObjectFind(0,nameObject)>=0)     // конечно объект не найден
     {
      if(!ObjectDelete(0,nameObject))
        {
         if(_LastError>0)
           {
            Print("1 Ошибка №",_LastError);
            ResetLastError();
           }
        }
     }
   ChartRedraw(0);
   if(_LastError>0)
     {                                 // поэтому сразу переходим сюда:
      Print("2 Ошибка №",_LastError);  // Тут ошибка №4202 <Графический объект не найден>
      ResetLastError();
     }
 
mql5:
试着理解为什么只有一条信息,而不是每个勾都有,那么你就不会有任何问题了。
对不起,我不明白。也许你知道答案,并给了我一个提示。我也想过,如果你告诉我哪个函数,ObjectFind()或ObjectDelete(),在_LastError中出错,或者其他,也许我会理解。
sergeev:

从代码的风格来看,它仍然可以被简化。 评论一下

也许在if/else中混淆了?

我已经尝试了很多变体(甚至在这个代码中),更不用说应用的地方了。而下面的if/else,似乎你可以把它删除,但错误仍然存在。

总的来说,它可以被绕过。你必须在体面地处理完对象后写更多的代码来检查它。我发现删除它并使用必要的参数重新创建它比较容易,因为它的参数在运行期间会多次变化。在这里我遇到了,这就是我问的原因。

 
barabashkakvn:

这使代码 更容易阅读,并立即显示错误。

什么是错误?即使你知道这个对象不存在,你就不能检查它是否存在吗?

至于设计,正如他们所说,"品味和色彩......"

 
svds75:

这有什么不对吗?即使你知道这个物体不存在,你就不能检查它的存在吗?

至于设计,正如他们所说,"品味和色彩......"

寻物

返回的值

如果函数成功,它将返回 找到的对象所在的子窗口的编号(0表示主图表窗口)。如果没有找到该对象,该函数将返回一个负数。要 获得 有关错误 额外信息,请调用 GetLastError() 函数

如果没有找到该对象,这就是一个错误。这时,ObjectFind 函数本身将返回一个负数,可以得到错误号码

这就更清楚了。

//---
   string nameObject="testObject";
   ChartRedraw(0);
   ResetLastError();
   int find=ObjectFind(0,nameObject);
   if(find>=0)     // конечно объект не найден
     {
      if(!ObjectDelete(0,nameObject))

在调试中运行它,看看变量"find"的值。