Fehler, Irrtümer, Fragen - Seite 1982

 
fxsaber:

Der Standard-Kopieroperator wird ausgelöst.

Wenn es nicht schwierig ist, wo kann ich es lesen?

 

Können Sie mir sagen, wie ich mit MQL4/5 Informationen aus einer E-Mail oder SMS lesen kann? Ich erhalte zum Beispiel ein Informationssignal per E-Mail, mein Expert Advisor liest es und öffnet/schließt die Position.

 
fxsaber:

Der Standard-Kopieroperator wird ausgelöst.

Ich habe dies sogar in den Dokumenten gefunden (beachten Sie die 3. Zeile von unten):

https://www.mql5.com/ru/docs/basis/types/casting

class CBar { };
class CFoo : public CBar { };
 
void OnStart()
  {
   CBar bar;    
//--- динамическое приведение типа указателя *bar к указателю *foo разрешено 
   CFoo *foo = dynamic_cast<CFoo *>(&bar); // критической ошибки выполнения не возникнет   
   Print(foo);                             // foo=NULL      
//--- попытка явного приведения ссылки объекта типа Bar к объекту типа Foo запрещено
   foo=(CFoo *)&bar;                       // возникнет критическая ошибка выполнения
   Print(foo);                             // эта строка не будет выполнена
  }

Ich erinnere mich, dass es möglich war, (in memcpy Stil) zu einfachen Strukturen zu kopieren, aber meine Struktur ist nicht einfach.

 
pavlick_:

Ich erinnere mich, dass es möglich war, in einfache Strukturen zu kopieren (im Stil von dumb memcpy), aber ich habe keine einfache Struktur.

MQL5 hat sich geändert.

 
fxsaber:

MQL5 hat sich geändert.

Forum zum Thema Handel, automatische Handelssysteme und Testen von Handelsstrategien

Die neue Version von MetaTrader 5 build 1640: Erstellen und testen Sie Ihre eigenen Finanzinstrumente

MetaQuotes Software Corp., 2017.07.19 18:03

Neue Version der MetaTrader 5 Plattform Build 1640: Erstellen und Testen von eigenen Finanzinstrumenten

  1. MQL5: Automatische Erzeugung des impliziten Kopieroperators für Objekte von Strukturen und Klassen hinzugefügt. Jetzt erzeugt der Compiler automatisch Kopieroperatoren, die es ermöglichen, einfache Sätze für Objekte wie b=a zu schreiben:
    class Foo
      {
       int               value;
    public:
       string Description(void){return IntegerToString(value);};
       //--- конструктор по умолчанию
                         Foo(void){value=-1;};
       //--- конструктор с параметрами   
                         Foo(int v){value=v;};
      };
    //+------------------------------------------------------------------+
    //|  структура, содержащая объекты типа Foo                          |
    //+------------------------------------------------------------------+
    struct MyStruct
      {
       string            s;
       Foo               foo;
      };
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //---
       MyStruct a,b;
       Foo an_foo(5);
       a.s="test";
       a.foo=an_foo;
       Print("a.s=",a.s," a.foo.Description()=",a.foo.Description());
       Print("b.s=",b.s," b.foo.Description()=",b.foo.Description());
    //---
       Print("b=a");
       b=a;
    //---
       Print("a.s=",a.s," a.foo.Description()=",a.foo.Description());
       Print("b.s=",b.s," b.foo.Description()=",b.foo.Description());
    /*
       Результат выполнения;
       a.s=test a.foo.Description()=5
       b.s= b.foo.Description()=-1
       b=a
       a.s=test a.foo.Description()=5
       b.s=test b.foo.Description()=5
    */
      }
    Der implizite Operator kopiert Objekte auswendig.

    • Wenn ein Mitglied ein Objekt ist, wird der diesem Objekt entsprechende Kopieroperator aufgerufen.
    • Handelt es sich bei dem Mitglied um ein Array von Objekten, so wird das empfangende Array vor dem Aufruf des entsprechenden Kopieroperators für jedes Element mittels ArrayResize auf die erforderliche Größe vergrößert oder verkleinert.
    • Handelt es sich bei einem Mitglied um ein Array von einfachen Typen, wird die Funktion ArrayCopy zum Kopieren verwendet.
    • Wenn ein Mitglied ein Zeiger auf ein Objekt ist, wird der Zeiger selbst kopiert, nicht das Objekt, auf das er zeigt.

    Falls erforderlich, können Sie das Verhalten außer Kraft setzen und anstelle des impliziten Kopieroperators durch Überladen eine eigene Variante erstellen.
 

fxsaber

Danke, das macht jetzt Sinn. Ich weiß nicht, ob ich mich freuen soll oder nicht. Die Kompatibilität mit dem alten Code ist nicht mehr gegeben. Es ist eine gute Idee, die Aktivierung der neuen Funktionalität bei solch bedeutenden Änderungen irgendwie zu erzwingen (über Kompilierungsschalter oder #pragma).


Zum Beispiel, mein auto_ptr:

template <typename T_>
class auto_ptr
{
public:
   T_ *p;
   void reset()  {if(this.p) delete this.p; this.p=NULL;}
   auto_ptr(void *ptr=NULL): p(ptr)  {}
   ~auto_ptr()  {this.reset();}
   void swap(auto_ptr<T_> &other)
   {
      T_ *buf = this.p;
      this.p = other.p;
      other.p = buf;
   }
};

Nun stellt sich heraus, dass auto_ptr im neuen Code kopiert werden kann (es sei denn, der Kopieroperator/Konstruktor ist stummgeschaltet), was zu mehreren Löschungen eines einzigen Zeigers führt.

 
 

Datei MQL5\Include\Controls\SpinEdit.mqh

int MaxValue(void) const { return(m_min_value); }

 

Wie kann ich MT4 herunterladen?
Ich lade die Datei mt4setup.exe herunter, installiere sie, aber die Plattform installiert mt5. Wo kann ich mt4 bekommen?

 
lukyF: Wie bekomme ich MT4?

Ich lade die Datei mt4setup.exe herunter, installiere sie, aber die Plattform installiert mt5. Wo kann ich mt4 bekommen?

Sie können mt4 von Ihrem Broker herunterladen. Diese Frage stellt sich jede Woche...
Grund der Beschwerde: