Fehler, Irrtümer, Fragen - Seite 2467

 
Igor Makanu:

Zum ersten Mal habe ich versucht, eine Wrapper-Klasse für ein zweidimensionales Array zu erstellen, aber ich konnte [] nicht überladen, um es wie ein normales zweidimensionales Array zu behandeln arr[1][2]

Ein solches Problem wurde vor 4-5 Jahren gelöst, es gab einen eigenen Zweig mit fertigen Lösungen.
Nur wenige der aktiven Teilnehmer haben bis heute überlebt, die meisten wurden aus dem Verkehr gezogen...

P.s. Es handelte sich nicht um ein zweidimensionales Feld, sondern um ein dreidimensionales Feld über Klassen.

 
Oh, ich glaube, ich habe diesen Thread gefunden:https://www.mql5.com/ru/forum/6729
В MQL5 всегда есть место подвигу ! ;)
В MQL5 всегда есть место подвигу ! ;)
  • 2012.05.16
  • www.mql5.com
Общее обсуждение: В MQL5 всегда есть место подвигу ! ;)
 
Sergey Dzyublik:

Ein solches Problem wurde vor 4-5 Jahren gelöst, es gab einen eigenen Zweig mit fertigen Lösungen.
Von den aktiven Teilnehmern haben nur wenige bis heute überlebt, die meisten wurden wieder verbannt...

P.s. Es handelte sich nicht um ein zweidimensionales Feld, sondern um ein dreidimensionales Feld über Klassen.

Nun, ich habe in diesem Thread nachgesehen - es gibt kein einziges Konto, das gesperrt oder gelöscht wurde. Alle Personen in diesem Zweig sind dort und leben noch.

Haben Sie auf diese Weise einen Skandal herbeigeführt, indem Sie ihn der Verwaltung in die Schuhe schoben? Das ist albern, nicht wahr? Hören Sie auf, das Böse hier zu sehen.

 
Sergey Dzyublik:
Oh, ich glaube, ich habe diesen Zweig gefundenhttps://www.mql5.com/ru/forum/6729

Ich glaube, ich habe diesen Thread letzten Monat gelesen, ich werde heute Abend noch einmal nachsehen.

aber meine Experimente mit dem Überladen von [][] endeten mit der Erkenntnis, dass ich entweder L-Wert oder R-Wert in MQL mit Überladen von [][] implementieren kann.

Wenn Sie eine vollständige Lösung für eine dynamische zweidimensionale Array haben - setzen Sie es in CodeBase, es ist eine nützliche Sache - ich habe nicht besser als CMatrixDouble von MT gesucht: #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();   
}

Was ist der Unterschied zwischen //1 und //2?
Leider lässt sich dieses Problem bei der Verwendung von Vorlagen in Containern mit einem beliebigen Datentyp nicht vermeiden.

Als Sonderfall können wir das Problem lösen, indem wir Vererbung implementieren, einen Kopierkonstruktor für die Elternklasse definieren und den Rückgabetyp in der Problemfunktion von der Basisklasse zur Elternklasse ersetzen.

 
Die Entwickler:
Bitte fügen Sie eine Funktion hinzu, die die Kapazität eines Arrays zurückgibt (die Anzahl der Elemente, für die Platz im Speicher reserviert ist). Nicht zu verwechseln mit dem Reserveparameter für ArrayResize.
Es gibtStringBufferLen für String, aber nichtsfür Array.
 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

Sergey Dzyublik, 2019.05.22 16:01

Nochmals vielen Dank anTheXpert für die Bereitstellung des Codes.
Wir haben die folgenden Ergebnisse auf ArrayResize Kapazität MT5 (build 2057):


Ergebnis:
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

 

Guten Abend!

Kann mir jemand sagen, was hier los ist?

Das ist das erste Mal, dass ich so etwas erlebe. Einfacher Code in einer der Funktionen.

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

Ergebnis:

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


 
Michael2K:

Guten Abend!

Kann mir jemand sagen, was hier los ist?

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


Verwenden Sie einen Punkt, um den Typ double anzugeben:

double yyy=28./50*100;
 
Sergey Dzyublik:
Bitte stellen Sie auch Pseudocode für die Verwendung von reserve_size Parameter in ArrayResize.
Es gibt keine Beschreibung, wie sich das System verhält, wenn ein neuer reserve_size Wert für das nächste ArrayResize gesetzt wird.
Sergey Dzyublik:


Ist die folgende Annahme beim sequentiellen Aufruf korrekt?

Soweit ich mich erinnere, wird die Kapazität nur dann erhöht, wenn die Größe des Arrays diese Kapazität überschreitet. Aber natürlich kann sich etwas geändert haben.

Und die Funktion, den Wert einer Saracity zu ermitteln, ist wirklich sehr nützlich.