Gemeinsam lernen und schreiben in MQL5 - Seite 33

 

Wir müssen die Initialisierung in die Initialisierungsliste verschieben.

Nur statische integrale Konstanten können in der Deklaration initialisiert werden (zumindest in C++, in MQL5 weiß ich es noch nicht :) )

 
Eine Frage noch, die letzte. Was ist der Grund dafür, dass "" und NULL für Strings nicht gleichwertig sind?
 
Interesting:

Apropos Vögel.

Und was wird der Compiler darauf antworten? Und sie wird folgende Fragen beantworten '=' - unzulässige Verwendung einer Zuweisung

Der Compiler war ungebeugt - '=' - unzulässige Verwendung einer Zuweisung.

Ich habe eine Frage: Was passiert, wenn der Programmierer (in diesem Fall ich) die Variablen nicht initialisiert, bevor er sie benutzt (er/sie tut, was der Compiler verlangt und lässt diesen Moment im Konstruktor aus)?


Die richtige Art und Weise, Mitglieder von Strukturen/Klassen im Konstruktor/den Konstruktoren zu initialisieren:

//Struct StrMQL4_Deal
struct StrMQL4_Deal
{
//----------------------------------------------------------------------------//
double TP;
double SL;
//----------------------------------------------------------------------------//
StrMQL4_Deal():TP(0),SL(0) { }
StrMQL4_Deal(double  tp,double  sl):TP(tp),SL(sl) { }
};
 
TheXpert:
Eine Frage noch, die letzte. Was ist der Grund dafür, dass "" und NULL für Strings nicht gleichwertig sind?
NULL bedeutet, dass die Zeichenfolge nicht zugewiesen ist, und "", dass die Zeichenfolge zugewiesen ist und einen Wert hat.
 
mql5:

Struktur-/Klassenmitglieder in den Konstruktoren ordnungsgemäß zu initialisieren:

Ja, das ist mir schon vor über einem Jahr klar geworden, zumindest habe ich das seit 2010 getan.
 
Interesting:
Ja, das habe ich vor über einem Jahr herausgefunden, zumindest mache ich das seit 2010 so.

Sie können es seit 2010 nicht mehr richtig gemacht haben, denn die Initialisierungsliste wurde erst vor kurzem eingeführt :) .

mql5:

NULL bedeutet, dass die Zeichenfolge nicht zugewiesen ist, und "", dass die Zeichenfolge zugewiesen ist und einen Wert hat.

Okay, ich werde es anders formulieren. Welchen Sinn hat es, dem Benutzer einen "nicht verteilten" String-Status zu übermitteln? Kann sie sinnvoll eingesetzt werden oder ist sie nur eine Krücke?
 
TheXpert:
Sie können es seit 2010 nicht mehr richtig gemacht haben, da die Initialisierungsliste erst kürzlich eingeführt wurde :) .
im Konstruktor gemeint.
 
TheXpert:

Sie können es seit 2010 nicht mehr richtig gemacht haben, da die Initialisierungsliste erst kürzlich eingeführt wurde :) .


Ich meinte die Initialisierung im Klassenkonstruktor und die Deklaration als

//----------------------------------------------------------------------------//
double TP;
double SL;
//----------------------------------------------------------------------------//
Ich kann mich nicht mehr genau erinnern, aber ich habe Anfang 2010 (erstes Quartal, ich kann es nicht genau sagen; und es ist mühsam, nach Quellen zu suchen) angefangen, mit Objekten zu arbeiten. Davor habe ich mich mit Bibliotheken beschäftigt und die Grundlagen von MQL5 studiert (oder besser gesagt, mich mit MQL5-Migrationsfragen beschäftigt).
 
Rosh:
Führen Sie eine Überlastungsfunktion für verschiedene Datentypen im Array aus.
Ups, ich hab's. Es gibt also keinen universellen Weg. Die Frage kam auf, weil das Überladen zu identischen Funktionen mit nur einem(!) Unterschied führt - im Funktionskopf, wenn Sie einen Array-Typ angeben müssen. Nicht gerade sauber, aber was soll ich machen, ich belasse es dabei. Ich hatte gehofft, dass es einen Ausweg gibt, wie im Referenzhandbuch.
 

Ein einfaches Skript wie dieses liefert seltsame Ergebnisse

void OnStart()
  {
   for(uchar u=120;u<136;u++)
     {
       switch(u>254)
        {
          case  true: Print(u,">254 - true");  break;
          case false: Print(u,">254 - false"); break;
        }
     }
  }

Vielleicht kann jemand erklären, woran das liegt? Wenn die Zahl 254 explizit in uchar umgewandelt wird, funktioniert sie wie vorgesehen.

Grund der Beschwerde: