Errori, bug, domande - pagina 2467

 
Igor Makanu:

Per la prima volta ho provato a fare una classe wrapper per un array bidimensionale, ma non ho potuto sovraccaricare [] per trattarlo come un normale array bidimensionale arr[1][2]

Un tale problema è stato risolto 4-5 anni fa, c'era un ramo separato con soluzioni già pronte.
Pochi dei partecipanti attivi sono sopravvissuti fino ad oggi, la maggior parte di loro sono stati banditi...

P.s. Non era un array bidimensionale, ma un array tridimensionale su classi.

 
Oh, penso di aver trovato quel threadhttps://www.mql5.com/ru/forum/6729
В MQL5 всегда есть место подвигу ! ;)
В MQL5 всегда есть место подвигу ! ;)
  • 2012.05.16
  • www.mql5.com
Общее обсуждение: В MQL5 всегда есть место подвигу ! ;)
 
Sergey Dzyublik:

Un tale problema è stato risolto 4-5 anni fa, c'era un ramo separato con soluzioni già pronte.
Dei partecipanti attivi, pochi sono sopravvissuti fino ad oggi, la maggior parte sono stati ri-bannati...

P.s. Non era un array bidimensionale, ma un array tridimensionale su classi.

Beh, sono andato a guardare in quel thread - non c'è un solo account che sia stato bannato o cancellato. Tutte le persone di quel ramo sono lì, e ancora vive.

È così che avete deciso di creare uno scandalo, lanciandolo contro l'amministrazione? È sciocco, vero? Smettete di vedere il male da queste parti.

 
Sergey Dzyublik:
Oh, penso di aver trovato quel ramohttps://www.mql5.com/ru/forum/6729

Credo di aver letto questo thread il mese scorso, lo cercherò di nuovo stasera

ma i miei esperimenti con l'overloading [][] si sono conclusi con la realizzazione che posso implementare sia L-value che R-value in MQL usando l'overloading [][].

Se avete una soluzione completa per un array dinamico bidimensionale - mettetela in CodeBase, è una cosa utile - non ho cercato di meglio che CMatrixDouble da MT: #include Math Alglib

 
class A{
public:
   uchar data1;
};

A func(){
   A a;
   a.data1 = 1;
   return a;      //object of 'A' cannot be returned, copy constructor 'A::A(const A &)' not found
}


void OnStart(){  
   A a;

   //1
   A aa = a;
   a = aa;
   
   //2
   a = func();   
}

Qual è la differenza tra //1 e //2?
Sfortunatamente, questo problema non può essere evitato quando si usano modelli in contenitori con un tipo di dati arbitrario.

Come caso speciale, per risolvere il problema, possiamo implementare l'ereditarietà, definire un costruttore di copia per la classe padre e sostituire il tipo di ritorno nella funzione problema dalla base al genitore.

 
Sviluppatori:
Aggiungete una funzione che restituisca la Capacità di un array (il numero di elementi per i quali è riservato spazio in memoria). Da non confondere con il parametro di riserva per ArrayResize.
C'èStringBufferLen per le stringhe ma nienteper gli array.
 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

Sergey Dzyublik, 2019.05.22 16:01

Grazie ancora aTheXpert per aver fornito il codice.
Abbiamo i seguenti risultati su ArrayResize capacità MT5 (build 2057):


Risultato:
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TEST_ArrayCapacity:TEST_ArrayCapacity
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,0):100
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):100
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,101,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,200,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,201,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,202,100):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,1):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,400):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,300,400):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,301,600):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,302,600):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,303,600):903
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,0):903
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):903
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,-1):100
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):100
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,105,100):205

 

Buona sera!

Qualcuno può dirmi cosa sta succedendo?

È la prima volta che lo vedo accadere. Semplice codice in una delle funzioni.

double yyy=28/50*100;
   
Print("test yyy=", yyy);

Risultato:

"2019.05.21 19:38:29.364 2019.04.01 00:05:00 test yyyy=0.0"


 
Michael2K:

Buona sera!

Qualcuno può dirmi cosa sta succedendo?

int(28) / int(50) * int(100) == int(0) * int(100) == int(0) == double(0.0)


Usa un punto fermo per specificare il tipo doppio:

double yyy=28./50*100;
 
Sergey Dzyublik:
Si prega di fornire anche uno pseudocodice per l'utilizzo del parametro reserve_size in ArrayResize.
Non c'è una descrizione di come il sistema si comporta quando un nuovo valore reserve_size è impostato per il prossimo ArrayResize.
Sergey Dzyublik:


La seguente assunzione è corretta quando si chiama in modo sequenziale:

Lo pseudocodice che hanno dato una volta in questo thread, cercalo. Per quanto mi ricordo, la capacità viene aumentata lì solo quando la dimensione dell'array supera questa capacità. Anche se naturalmente qualcosa potrebbe essere cambiato.

E la funzione di ottenere il valore di una saracinesca è davvero molto utile.