Errori, bug, domande - pagina 1729

 
fxsaber:

Creo OBJ_CHART e lo trascino con il mouse intorno all'angolo in alto a sinistra del grafico. Durante il trascinamento, ObjectDelete viene chiamato con successo. MT5.

Anche. Se trascino OBJ_CHART e cambio le sue proprietà CHART (ChartNavigate, per esempio), allora non c'è una visualizzazione corrispondente.
 
I commenti non pertinenti a questo argomento sono stati spostati in "Come determinare a quale indicatore appartiene ogni sottofinestra".
 
A100:

Errore di compilazione:

Apparso nella build 1447
Grazie per il post, il controllo della costanza dei parametri passati è stato corretto.

Ora ci sarà un errore di compilazione in entrambi i casi, il codice dovrebbe essere cambiato per evitare l'errore:
template<typename T>
void f1( const T* const & a[] ) {}    << добавлена константность ссылки
class A {};
void f2( const A* const & a[] ) {}    << добавлена константность ссылки
class B {
        void g1() const { f1( a ); } //error: 'f1' - cannot to apply function template
        void g2() const { f2( a ); } //нормально
        A *a[];
};
 
константность ссылки

Non l'ho visto da nessuna parte. È questo lo standard?

 
Ilyas:
Ora in entrambi i casi ci sarà un errore di compilazione, per evitare l'errore, il codice dovrebbe essere cambiato:

Controlla anche questa contraddizione (qui di fronte - errore in basso)

template<typename T>
void f1( const T& a[] ) {}
class A {};
void f2( const A& a[] ) {}
class B {
        void g1() const { f1( a ); } //нормально
        void g2() const { f2( a ); } //error: 'a' - parameter conversion not allowed
        A *a[];
};
 

Come funziona MQL5 con la memoria?

Per esempio, c'è il seguente codice:

class Alfa {}
class Beta
  {
private:
   Alfa  *ptr_a;
   Alfa   obj_a;
public:
   Beta(void) { ptr_a = new Alfa(); }
  ~Beta(void) { delete ptr_a; }
   Metod(void) {...}
  }
//---

int OnInit(void) {
   Beta *ptr_obj = new Beta();
   Beta obj;
//---
   return INIT_SUCCEEDED;
}
void OnDeinit(const int reason) {
   delete ptr_obj;
}

secondo il quale la memoria in "heap" sarà allocata per l'oggetto ptr_obj, e la memoria automatica sarà allocata per l'oggetto obj. Se il funzionamento del gestore di memoria MQL5 è chiaro per questi oggetti:

1. l'oggettoptr_a dell'oggettoptr_obj è allocato in memoria nell'"heap".

2. La memoria per l'oggettoobj_a dell'oggettoobj è allocata automaticamente

Come è organizzato il gestore di memoria MQL5 in questi casi:

3. in quale area di memoria si troverà l'oggetto obj_a dell'oggetto ptr_obj

4. in quale area della memoria si troverà l'oggetto ptr_a dell'oggetto obj

 
A100:

Controlla anche questa contraddizione (qui al contrario)

Questo è corretto, qui con la digitazione, T = A *
 
void f( const A* &Array[] );

Con questo trasferimento, è possibile scambiare gli elementi della matrice (e le dimensioni), ma non è possibile scambiare gli elementi stessi. Giusto?

void f( const A* const &Array[] );

E anche qui gli elementi (e le dimensioni) non possono essere scambiati. È corretto?

 
fxsaber:

Non l'ho visto da nessuna parte. È questo lo standard?

Scritto in modo da non scrivere: ci dovrebbe essere un riferimento a un array costante di puntatori a oggetti costanti
 
fxsaber:

Con questo trasferimento, è possibile scambiare gli elementi della matrice (e le dimensioni), ma non è possibile scambiare gli elementi stessi. Giusto?

E anche qui gli elementi (e le dimensioni) non possono essere scambiati. È corretto?

Sì, è corretto.