Errori, bug, domande - pagina 1149

 
Contender:

Altrimenti:

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

?

grazie.... domanda rimossa.
 

Saluti alla rispettata comunità.

Non l'ho trovato sul sito, e non l'ho capito io stesso per mezza giornata, perché questo codice scrive un errore. Per favore, ditemi se potete.

//+------------------------------------------------------------------+
//| 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:

Saluti alla rispettata comunità.

Non l'ho trovato sul sito, e non l'ho capito io stesso per mezza giornata, perché questo codice scrive un errore. Per favore, ditemi se potete.

Perché cancellare l'oggetto?
 
sergeev:
perché cancellare un oggetto?
Il programma è in realtà più complicato di così. L'ho già semplificato a dismisura per vedere qual è il problema. Ma non l'ho capito.
 
svds75:
Il programma è in realtà più complesso. L'ho già semplificato a dismisura per vedere qual è il problema. Ma ancora non lo capisco.
Cercate di capire perché c'è solo un messaggio e non tutte le spunte, allora non ci saranno domande.
 
svds75:
In realtà il programma è più complesso. L'ho già semplificato a dismisura per vedere qual è il problema. Ma ancora non lo capisco.

A giudicare dallo stile del codice, può ancora essere semplificato.

Forse mi sono confuso nell'if/else?

 
svds75:

Saluti alla rispettata comunità.

Non l'ho trovato sul sito, e non l'ho capito io stesso per mezza giornata, perché questo codice scrive un errore. Per favore, ditemi se potete.

Il codice è meglio leggibile in questo layout e l'errore è immediatamente visibile:

//---
   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:
Cercate di capire perché c'è solo un messaggio e non tutte le spunte, poi non avrete più domande.
Mi dispiace, non capisco. Forse lei conosce la risposta e mi ha dato un suggerimento. Ci ho anche pensato, vorrei che mi dicessi quale funzione, ObjectFind() o ObjectDelete(), fa un errore in _LastError, o qualsiasi altra, forse capirei.
sergeev:

a giudicare dallo stile del codice, può ancora essere semplificato. commenta un po

forse confuso nell'if/else?

Ho provato molte varianti (anche in questo codice), per non parlare del luogo di applicazione. E if/else qui sotto sembra che tu possa rimuoverlo e l'errore rimane.

In generale, può essere aggirato. Dovete scrivere altro codice controllando l'oggetto dopo averlo trattato decentemente. Trovo più facile cancellarlo e crearlo di nuovo con i parametri necessari perché i suoi parametri cambiano molte volte durante il runtime. Questo è quello che ho incontrato ed è per questo che chiedo.

 
barabashkakvn:

Questo rende il codice più facile da leggere e mostra immediatamente l'errore:

Qual è l'errore? Anche se sapete che l'oggetto non esiste, non potete controllare se esiste?

E per quanto riguarda il design, come si dice, "per gusto e colore..."

 
svds75:

Cosa c'è di sbagliato in questo? Anche se sapete che l'oggetto non esiste, non potete controllare la sua esistenza?

E per quanto riguarda il design, come si dice, "gusto e colore..."

ObjectFind

Valore restituito

Sela funzione ha successo, restituisce il numero della sottofinestra (0 significa finestra principale del grafico), in cui si trova l'oggetto trovato. Se l'oggetto non viene trovato, la funzione restituisce un numero negativo. Per ottenere ulteriori informazioni sull'errore, chiamate la funzione GetLastError().

Se l'oggetto non viene trovato, questo è un errore. A quel punto, la funzioneObjectFind stessarestituirà un numero negativo e il numero di errore può essere ottenuto.

Questo è più chiaro:

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

Eseguilo in debug e vedi il valore della variabile"find"

Motivazione: