Errori, bug, domande - pagina 1513

 

Che è meglio, dal punto di vista delle prestazioni, così:

  template <typename T>
  void SetProperty( const int id, const T Value, const int Modifier = 0 ) const
  {
    const string sType = typename(T);

    if (sType == "double")
      ::ObjectSetDouble(this.Chart, this.Name, id, Modifier, (double)Value);
    else if (sType == "string")
      ::ObjectSetString(this.Chart, this.Name, id, Modifier, (string)Value);
    else
      ::ObjectSetInteger(this.Chart, this.Name, id, Modifier, (long)Value);

    return;
  }

o sovraccaricando i metodi?

 
zaskok3:

Che è meglio, dal punto di vista delle prestazioni, così:

o sovraccaricando i metodi?

non vedrai alcuna differenza in termini di prestazioni - entrambe le soluzioni hanno il loro posto :)
 
coderex:
non vedrete una differenza in termini di prestazioni - entrambe le soluzioni hanno un posto :)

Grazie! Un'altra domanda:

Qual è lo scopo dei campi const in una struttura? Tali strutture non possono nemmeno essere passate (giuramenti del compilatore o stack overflows)?

#property strict 

struct STRUCT
{
  const int Num;
  
  STRUCT( const int iNum = 0 ) : Num(iNum) // Если затереть " = 0", то будет ошибка компиляции: 'STRUCT' - wrong parameters count 
  {
  }
  
/*
// Так получается обойти ошибки компиляции, но на этапе выполнения: Stack overflow   
  STRUCT operator = ( STRUCT &Struct )
  {
    STRUCT Res(Struct.Num);
    
    return(Res);
  }
*/
};

const STRUCT GetStruct( const int Num = 0 )
{
  STRUCT Struct(Num);
  
  return(Struct); // 'return' - not allowed for objects with protected members or inheritance 
}

void OnStart( void )
{
  Print(GetStruct(1).Num);
  
  return;
}


Sovraccaricare l'operatore di assegnazione per le strutture è effettivamente impossibile (avrebbe senso a causa della ricorsione infinita). Allora perché i campi costanti in una struttura?

 
Karputov Vladimir:

Su Windows 10 x64 non ho mai incontrato questo errore sulla build 1241. Dopo il comando "Unfold", la finestra grafica si dispiega completamente, senza alcun buco:

Probabilmente hai cambiato alcune impostazioni all'interno del tuo sistema operativo (forse ti piace rifinire le impostazioni predefinite del tuo sistema operativo o pulire il registro di sistema o cose simili...).

Quando si trascina il vetro con il mouse, premere "Shift" o "Ctrl" o "Alt" a questo punto.

Il mio miglior consiglio è di scrivere a serviceDesk con una descrizione dettagliata, con il proprio codice (che mostra i tick), con screenshot.

>> Probabilmente hai cambiato alcune impostazioni all'interno del tuo sistema operativo (forse sei appassionato di tagliare le funzioni standard del tuo sistema operativo, o la pulizia del registro, ecc...).

>> Non mi piace quella roba, i sistemi sono puliti

>> Qui posso consigliarvi con una descrizione dettagliata, con il vostro codice (che mostra i tic), con screenshot per fare un'applicazione a ServiceDesk.

E dov'è questo? Pensavo che questo ramo fosse un serwer

 

Se uso #include per includere un file mqh che contiene qualcosa di simile nell'indicatore:

int GetIndicatorBuffers( void )
{
  return(indicator_buffers); // 'indicator_buffers' - undeclared identifier
}

non ci sono errori nella fase di compilazione dell'indicatore stesso. Ma si verifica con mqh separatamente (vedi sopra).

Come posso trovare il valore di questo indicatore di proprietà in MT4, in modo che il compilatore non si lamenti più di una volta nel mqh tappato?

 

Sto cercando di garantire che l'applicazione operi in MQL5 e MQL4 in modo identico.

Ho il sospetto che quando hanno introdotto le variabili sinput in MQL4, hanno dimenticato di aggiungere le funzioniParameterSetRange() eParameterGetRange() al linguaggio.

Appaiono nella documentazione MQL4 comeParameterSetRange() eParameterGetInput()-https://docs.mql4.com/basis/variables/inputvariables#sinput

ma il compilatore non li accetta.

Purtroppo, senza queste funzioni tutto il divertimento delle variabili sinput è perso.

Input Variables - MQL4 Documentation
Input Variables - MQL4 Documentation
  • docs.mql4.com
Input Variables - MQL4 Documentation - MQL4 Documentation
 
zaskok3:

Grazie! Un'altra domanda:

Qual è lo scopo dei campi const in una struttura? Tali strutture non possono nemmeno essere passate (giuramenti del compilatore o stack overflows)?


Sovraccaricare l'operatore di assegnazione per le strutture è praticamente impossibile (avrebbe senso a causa della ricorsione infinita). Allora perché i campi costanti in una struttura?

Buon divertimento:

#property strict

struct STRUCT
{
  const int Num;
  
  STRUCT( const int iNum  ) : Num( iNum )
  {
  }
  
  STRUCT( const STRUCT& Struct ) : Num( Struct.Num )
  {
  }
};

const STRUCT GetStruct( const int Num = 0 )
{
  STRUCT Struct( Num );
  return Struct;
}
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   Print( GetStruct(1).Num );
}
//+------------------------------------------------------------------+
 
Koldun Zloy:

Buon divertimento:

È bello andare dritti al punto, grazie! Mi sto ancora chiedendo perché non l'ho capito da solo prima di sovraccaricare il costruttore, ma sono andato nell'operatore di assegnazione. Dopo tutto, la soluzione è ovvia!
 

Ho spostato la cartella del terminale MT4 in un'altra unità. In precedenza l'ho eseguito con la chiave portatile. Ho fatto la stessa cosa questa volta.

Il terminale si è connesso subito al server. In passato, quando spostavo una cartella del terminale, le password non venivano salvate - dovevo reinserirle. Ora (build 950) non succede.

È normale (e solo per me)?

 
zaskok3:

Quale modo migliore, dal punto di vista delle prestazioni, è questo:

Sovraccarico, naturalmente.