エラー、バグ、質問 - ページ 1149

 
Contender:

それ以外は。

文字列 var1[1][2] = {{"dfdffd", "dfdfdfd"}}.

?

ありがとう...質問を削除しました。
 

尊敬するコミュニティーの皆様へご挨拶申し上げます。

なぜこのコードがエラーを書くのか、ウェブサイトでは見つからず、私自身も半日ほど理解できていません。できれば教えてください。

//+------------------------------------------------------------------+
//| 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:
なぜメッセージが1つだけで、すべてのティックがないのかを理解するようにすれば、疑問はなくなるはずです。
すみません、よくわからないんです。もしかしたら、あなたは答えを知っていて、ヒントをくれたのかもしれませんね。あと、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" の値を見る