Fehler, Irrtümer, Fragen - Seite 1784

 
Rashid Umarov:
Siehe hier - Programmablauf

Eine Übersicht über die Programme in MQL5 finden Sie in der nachstehenden Tabelle:

Programm

Ausführung

Hinweis

Drehbuch

In einem eigenen Thread so viele Skripte, wie es Ausführungs-Threads für sie gibt

Ein Skript in einer Schleife kann die Arbeit anderer Programme nicht unterbrechen

Experte

In einem eigenen Thread, so viele Experten - so viele Ausführungsthreads für sie

Ein Experte in einer Schleife kann die Arbeit anderer Programme nicht stören

Indikator

Ein Ausführungsstrang für alle Indikatoren auf einem Symbol. So viele Indikatorsymbole - so viele Ausführungsstränge für sie

Endlosschleife in einem Indikator stoppt alle anderen Indikatoren für dieses Symbol

Danke, genau das habe ich gemeint.

Forum für Handel, automatisierte Handelssysteme und Strategietests

Wanzen, Wanzen, Fragen

Slawa, 2017.02.06 07:22

Aber auch hier kann man sich nicht darauf verlassen, dass der Deinit-Befehl auf M5 vor dem Init-Befehl auf M15 verarbeitet wird

 
-Aleks-:

Leider bin ich mit diesem Format nicht vertraut.

Das Experiment hat gezeigt, dass die Zahl im grafischen Puffer nach denselben Regeln dargestellt wird wie die doppelte Zahl - d. h. es ist nicht möglich, eine so lange Zahl durch den grafischen Puffer zu leiten - frustrierend.

Leider kann der grafische Puffer nur eine Zahl mit 10 Ziffern aufnehmen.

Übrigens, warum gibt es eine Grenze von 4 Dezimalstellen?

 

Kompilierungsfehler (oder vielmehr keine Fehlermeldung)

class A {
public:
        int i;
};
class B : public A {};
class C : protected A {};
class D : protected B {};
void OnStart()
{
        C c;
        Print( c.i ); //Error: 'i' - protected member access error
        D d;
        Print( d.i ); //нормально???
}
 

Ausführungsfehler: EX5-Laden fehlgeschlagen

class A;
typedef void (*f)( A*);
class A {
    virtual void g( A *a ) {}
        f ff;
};
void OnStart() { Print( __FUNCTION__ ); }
 

Fehler bei der Ausführung

class B;
void f( B* );
class A { public:
        virtual ~A() { f((B *)&this ); } //(*)
        virtual void g( A* ) { Print( __FUNCTION__ ); }
};
class B : public A { public:
        virtual void g( A* ) { Print( __FUNCTION__ ); }
};
void f( B *b ) { b.g( b ); }
void OnStart() //(1)
{
        B *b = new B;
        delete b;
}

Ergebnis: falsches Casting von Zeigern in (*)

Und wenn

void OnStart() { B b; } //(2)

Ergebnis: B::g

aber was ist der grundlegende Unterschied zwischen OnStart (1) und (2)?

Außerdem ist das Ergebnis eines ähnlichen Codes in C++: A::g

 

A100: 

Wofür würde ein virtueller Destruktor wie der in Ihrem Beispiel oben sein? Kann sie im Nachkommen überschrieben werden?

 
fxsaber:

Wofür würde ein virtueller Destruktor wie der in Ihrem Beispiel oben sein? Kann sie im Nachkommen überschrieben werden?

In MQL ist sie immer virtuell, auch wenn sie nicht explizit angegeben ist
 
A100:
In MQL ist es immer virtuell, auch wenn es nicht ausdrücklich angegeben ist
Sie haben also die Frage nicht beantwortet - wozu?
 
fxsaber:
Sie haben also die Frage nicht beantwortet: Wozu?
Wenn alle Destruktoren in MQL virtuell sind, dann läuft die Frage, warum wir einen virtuellen Destruktor brauchen, darauf hinaus, wofür wir einen Destruktor brauchen? Und das ist eine zu allgemeine Frage.
 
A100:
Wenn alle Destruktoren in MQL virtuell sind, dann reduziert sich die Frage, wofür ein virtueller Destruktor ist, auf die Frage, wofür ein Destruktor ist? Und das ist eine zu allgemeine Frage.
Ich weiß, wofür ein Destruktor verwendet wird. Mir ist nicht klar, warum ich das Wort "virtuell" vor die Definition setzen sollte.