Errori, bug, domande - pagina 1161

 
joo:

v4.3, firmware personalizzato.

La finestra principale è in posizione orizzontale, le altre finestre di dialogo (ordini) sono in verticale. Fastidioso passaggio incontrollabile avanti e indietro dalla finestra principale alle finestre di dialogo.

Andiamo .... nemmeno un software specializzato come Smart Rotator.... aiuta

è divertente, ma se si imposta forzatamente il paesaggio in Smart Rotator per il terminale, tutte le finestre diventano paesaggio. ma io voglio il ritratto! - Ho impostato la modalità ritratto per il terminale, e cosa? - hehehe... ancora alcune finestre sono in orizzontale e altre in verticale.

 

Un difetto nel meta-editor.

Supponiamo di avere una funzione Obj() che restituisce un puntatore a un oggetto:

class CObject {   public:     int value; }; CObject object;

CObject* Obj() { return GetPointer(object); }

Ora, se ci riferiamo all'oggetto direttamente attraverso la funzione:Obj().value = 10, non appare nessuna lista pop-up di membri e metodi della classe dopo aver inserito un punto.

 
meat:

Laclasse CArray non è una panacea, dato che MQL non supporta i modelli di classe. Il nostro array non consiste necessariamente di tipi semplici, e creare una struttura completa del discendente CArray per ogni nuova classe in un programma non è molto interessante. Basta guardare quante righe di codice prende ogni file CArray discendente (ArrayInt.mqh, ArrayDouble.mqh ecc.)

E come è organizzata la struttura del programma è di secondaria importanza. Non divaghiamo dall'argomento. Il punto è che se c'è qualche parametro che può essere cambiato (in questo caso è reserve_size), dovrebbe essere possibile ottenerlo.

I tipi complessi sono ereditati da CObject e confezionati in modo sicuro in CArrayObj.

reserve_size - rompe il paradigma della programmazione economica. Esiste solo per i principianti e non deve esistere affatto nelle lingue normali.

 
C-4:

reserve_size - viola il paradigma della programmazione frugale. Esiste solo per i principianti e non dovrebbe esistere affatto nelle lingue normali.

Lei ha uno strano paradigma. La prenotazione è precisamente progettata per un uso economico delle risorse, riducendo il numero di riallocazioni di memoria e lo spostamento dei dati (e queste sono operazioni abbastanza costose). Ed è uno sviluppatore di codice che deve gestire questo parametro, perché solo lui sa in anticipo come il suo programma utilizzerà la memoria. E non ha nulla a che fare con il linguaggio, perché un array è un array, richiede memoria ovunque.

 
meat:

Questo è uno strano paradigma per te. La riserva è precisamente progettata per un uso economico delle risorse, riducendo il numero di riallocazioni di memoria e trasferimenti di dati (e queste sono operazioni abbastanza costose). Ed è uno sviluppatore di codice che deve gestire questo parametro, perché solo lui sa in anticipo come il suo programma utilizzerà la memoria. E non ha nulla a che fare con il linguaggio, perché un array è un array così com'è, richiede memoria ovunque.

Quindi hai già risposto alla tua stessa domanda:

È uno sviluppatore di codice che dovrebbe gestire questo parametro, poiché solo lui sa in anticipo come il suo programma utilizzerà la memoria. Non ha niente a che vedere con la lingua.

Non ha niente a che vedere con i mezzi linguistici e deve quindi essere risolto a un livello superiore, quello dell'utente. Quindi, risolvete il vostro compito con le classi CArray* create appositamente per questi compiti, che, tra l'altro, gestiscono questo compito in modo brillante e come se fossero state create per esso.

 
meat:

Lei ha uno strano paradigma. La ridondanza è precisamente progettata per utilizzare le risorse con parsimonia, riducendo il numero di riallocazioni di memoria e trasferimenti di dati (che sono operazioni abbastanza costose)...

void TestFoo()
{
  CArrayObj listObj;
  listObj.Resize(100);
  for(int i = 0; i < 100; i++)
     listObj.Add(new CObject());
  int count = CountObj(listObj);
}

void CountObj(CArrayObj* obj)
{
   return obj.Size();
}
Codice super risparmio. Non ci sono riallocazioni di memoria, poiché il numero di elementi è noto in anticipo. Non sono gli array che vengono passati, ma i puntatori ad essi. La velocità è incredibilmente veloce e non c'è bisogno di reserve_size. Cosa non ti piace di questa soluzione?
 
C-4:
Codice super risparmio. Non ci sono riallocazioni di memoria, poiché il numero di elementi è noto in anticipo. Non sono gli array che vengono passati, ma i puntatori ad essi. La velocità è incredibilmente veloce, e non abbiamo bisogno di alcun reserv_size. Cosa non ti piace di questa soluzione?

Eh, se solo fosse così semplice... Nel mondo reale, il numero di elementi non è solitamente noto in anticipo. E per di più, questo numero cambia dinamicamente. Quindi il tuo esempio semplificato di "Ciao mondo" non ha senso. Può essere sostituito con solo due righe:

CObject listObj[100];
int count = ArraySize(listObj);

Beh, che senso ha tutta questa spazzatura? Se tu personalmente non usi il parametro reserve_size, sei il benvenuto. Ma non concludete che tutti gli altri sono degli sciocchi o dei novizi. Forse non hai capito qualcosa. Nei contenitori STL standard, progettati per lavorare con gli array (vettori, stringhe, ecc.), sono sempre presenti anche metodi come reserve e capacity.

 
joo:

Andiamo .... nemmeno un software specializzato come Smart Rotator.... aiuta

È divertente, ma se forzo il landscape in Smart Rotator per il terminale, tutte le finestre diventano landscape. ma io voglio la modalità portrait! - Ho impostato il terminale in modalità ritratto e cosa? - hehehe... ancora alcune finestre sono in orizzontale e altre in verticale.

funziona bene sul firmware stock (almeno come previsto)
 

Nell'ultima build la ricerca in MetaEditor (la casella in alto a destra) non funziona più correttamente. Quando inserisco la parola che sto cercando lì, la sostituisce automaticamente con una frase simile, presa da qualche parte che non so dove e senza motivo. Per esempio, cerco di trovare una variabile chiamata "ERROR_VALUE" ma ottengo invece "error_value 7" nella linea di ricerca.

Domanda: qual è il problema? Da dove viene questa spazzatura di sinistra nella linea di ricerca e come toglierla?

 
meat:

Nell'ultima build la ricerca in MetaEditor (la casella in alto a destra) non funziona più correttamente. Quando inserisco la parola che sto cercando lì, la sostituisce automaticamente con una frase simile, presa da qualche parte che non so dove e senza motivo. Per esempio, cerco di trovare una variabile chiamata "ERROR_VALUE" ma ottengo invece "error_value 7" nella linea di ricerca.

Domanda: qual è il problema? Da dove viene questa spazzatura di sinistra nella linea di ricerca e come toglierla?

Pulire la tastiera.