Fehler, Irrtümer, Fragen - Seite 1543

 
comp:

In der ObjectSetInteger-Beschreibung heißt es jetzt zum Beispiel

Es sollte sein

Lesen Sie alle Artikel bis zum Ende.

prop_id

[in] Kennung der Objekteigenschaft. Der Wert kann einer der Werte der Aufzählung ENUM_OBJECT_PROPERTY_INTEGER sein.

Ich habe es Ihnen bereits gesagt. Lesen Sie die Dokumentation aufmerksam, ohne einen Säbel in der Hand zu halten.
 
Slawa:

Lesen Sie die Themen bis zum Ende

Ich habe es Ihnen bereits gesagt. Lesen Sie die Dokumentation sorgfältig durch, ohne einen Säbel in der Hand zu halten.

Lesen Sie SEHR sorgfältig und bis zum Ende. Ihr Zitat stammt von dort

Bezeichner einer Objekteigenschaft. Der Wert kann einer der Werte der AufzählungENUM_OBJECT_PROPERTY_INTEGER sein.

Es sollte sein

Bezeichner der Objekteigenschaft. Wert MUSS einer der Werte der AufzählungENUM_OBJECT_PROPERTY_INTEGERsein.

Das Erfordernis des expliziten Ghosting für diesen Typ wird durch die einzige in fünf kompilierte Variante bestätigt (überprüfen Sie es selbst). Ohne diesen Geist beschwert sich der Compiler über das Fehlen der entsprechenden Überladungen.

 
Ich kannte diesen Trick nicht. Wenn Sie eine mq4-Datei in einem five-Meta-Editor öffnen, wird sie zu ex4 kompiliert!
 
ein Compiler ein Editor
 

Das heißt, als Sie ihn gelesen haben, dachten Sie: "Der Wert kann einer der Werte der AufzählungENUM_OBJECT_PROPERTY_INTEGER sein. Vielleicht aber auch nicht. Und was nicht sein darf, steht nicht in der Dokumentation, also ist alles erlaubt, was nicht verboten ist. Denn wir dehnen die Grundsätze des sozialen Lebens auf die Programmierung aus.

Ich frage mich, was MetaEditor Ihnen über den Typ des entsprechenden Parameters sagt, wenn es die Parameter dieser Funktion festlegt?

 
In der MQL-Hilfe gibt es eine Menge Unklarheiten. In diesem Sinne hat comp also recht - je weniger mögliche Interpretationen beim Lesen der Hilfe, desto besser.
 
Slawa:

Das heißt, als Sie ihn gelesen haben, dachten Sie: "Der Wert kann einer der Werte der AufzählungENUM_OBJECT_PROPERTY_INTEGER sein. Vielleicht aber auch nicht. Und was nicht sein darf, steht nicht in der Dokumentation, also ist alles erlaubt, was nicht verboten ist. Denn wir dehnen die Grundsätze des sozialen Lebens auf die Programmierung aus.

Nein, das habe ich nicht gedacht. Ich dachte, wenn der Code mit MT4 korrekt kompiliert wurde, sollte er auch mit MT5 korrekt kompiliert werden. Als das nicht der Fall war, begann ich zu graben. Überprüfen Sie den Code auf MT4 und MT5 und stellen Sie sicher, dass

class CHARTOBJECT
{
public:
  template <typename T>
  void SetProperty( const int id, const T Value, const int Modifier = 0 ) const
  {
    const string sType = typename(T);

    if (sType == "double")
      ::ObjectSetDouble(0, "", id, Modifier, (double)Value);
    else if (sType == "string")
      ::ObjectSetString(0, "", id, Modifier, (string)Value);
    else
      ::ObjectSetInteger(0, "", id, Modifier, (long)Value);

    return;
  } 
  
  virtual void operator =( const string Value ) const
  {
    this.SetProperty(OBJPROP_TEXT, Value);

    return;
  }
};

Ich frage mich, was MetaEditor Ihnen über den Typ des betreffenden Parameters gesagt hat, als es die Parameter dieser Funktion eingegeben hat?

Er hat sie anhand der von mir oben angegebenen Spezifikation korrekt korrigiert. In der Dokumentation heißt es int.

 
comp:

Nein, das habe ich nicht gedacht. Ich dachte, wenn der Code unter MT4 ohne Fehler kompiliert wurde, sollte er auch unter MT5 ohne Fehler kompiliert werden. Als das nicht der Fall war, begann ich zu graben. Überprüfen Sie den Code auf MT4 und MT5 und stellen Sie sicher, dass

Und warum?

MT4 und MT5 haben von Natur aus eine unterschiedliche Architektur

Bei der Übersetzung von MQL4 von der alten in die neue Syntax (MQL4+ genannt) mussten wir auf die alte MQL4-Syntax zurückgreifen, in der viele Dinge fehlten, einschließlich Aufzählungen.

 

comp, lassen Sie uns freiwillig eine Woche lang nur lesen. Seien Sie ein Leser, nicht ein Schriftsteller.

Alles, worüber Sie hier sprechen, wurde schon viele Male diskutiert, nicht nur in diesem Forum, sondern auch auf MQL4.com.

 
Slawa:

Warum ist das so?

MT4 und MT5 haben von Anfang an eine unterschiedliche Architektur

Bei der Migration von MQL4 von der alten auf die neue Syntax (MQL4+ genannt) mussten wir auf die vorherige MQL4-Syntax zurückgreifen, in der viele Dinge fehlten, einschließlich Aufzählungen.

Man kann lange Zeit erfolglos streiten. Wäre die Dokumentation nicht int, sondern der Hinweis bei der Eingabe des Funktionsnamens, hätte ich die Ursache für die Compilerschelte sofort gefunden (im Beispiel mit der Vorlage war sie nicht offensichtlich). Denn laut der Dokumentation sollte der Code als int und "kann" kompiliert worden sein. Ich weiß nicht, was mich daran hindert, die Dokumentation und die Tooltips aufeinander abzustimmen. Aber für die Zukunft werde ich mich daran erinnern, dass es im Falle eines Missverständnisses besser ist, auf die Tooltips zu schauen, anstatt auf die Dokumentation.