Fehler, Irrtümer, Fragen - Seite 2258

 
Anatoli Kazharski:

Sie müssen in der Lage sein, Änderungen in den Eigenschaften aller Diagramme zu verfolgen, nicht nur desjenigen, auf dem das MQL-Programm platziert ist.

Machen Sie eine Krücke durch einen Timer.

 
fxsaber:

Machen Sie eine Krücke durch den Timer.

Ich will keine Krücke machen. MQ-Entwickler können die Möglichkeiten erweitern.

Forum für Handel, automatisierte Handelssysteme und Strategietests

Wanzen, Wanzen, Fragen

Anatoli Kazharski, 2018.08.20 08:11

Ich möchte in der Lage sein, Änderungen der Eigenschaften aller Diagramme zu verfolgen, nicht nur desjenigen, in dem das MQL-Programm platziert ist.

Zurzeit enthält das EreignisCHARTEVENT_CHART_CHANGE keine weiteren Parameter:

Veranstaltung

Parameterwert id

Parameterwert lparam

Parameterwert dparam

Parameterwert sparam

Das Ereignis der Änderung der Diagrammabmessungen oder der Änderung der Diagrammeigenschaften über den Eigenschaftsdialog

CHARTEVENT_CHART_CHANGE

-

-

-

//---

Um dieses Ereignis auf anderen offenen Charts zu verfolgen, kann die Überwachung durch Angabe der ID des gewünschten Charts aktiviert werden.

Zum Beispiel so:

ChartSetInteger(chart_id,CHART_EVENT_CHART_CHANGE,true);
//---


Als lparam-Parameter könnte der Bezeichner des Diagramms dienen, an dem Änderungen vorgenommen wurden. Der Parameter sparam könnte der Name des Symbols sein.

 
A100:

Fehler bei der Ausführung:

Ergebnis: Erwartet:

A::f<int>:1 A::f<int>:1
A::f<int>:753790661 A::f<int>:2
A::f<int>:Fehler:4007

Ansonsten:

Gut. Was ist der Unterschied? Warum wurde die Array-Größe plötzlich auf 753790660 (statt auf eins) erhöht, und infolgedessen wurde der Speicher plötzlich knapp (4007)? MT5\1881\32

Außerdem... wenn Sie im ersten Fall buchstäblich drei Zeichen in der Klasse löschen, ist das Ergebnis ebenfalls in Ordnung

Danke für die Nachricht.

Behoben.


Um im aktuellen Build zu funktionieren, geben Sie bei der Deklaration der Methoden der Klasse scop nicht an.


Andere Fehlerberichte stehen mit diesem in Zusammenhang und werden nach der Behebung nicht mehr reproduziert.

 

das Beispiel aus der Hilfe funktioniert nicht:

https://www.mql5.com/ru/docs/basis/function/operationoverload

das Beispiel ganz unten auf der Seite funktioniert nicht, vom Wortlaut her:

Другой пример перегрузки операции индексирования - работа с матрицами. Матрица представляет собою двумерный динамический массив, размеры массивов заранее неопределены. Поэтому нельзя объявить массив вида array[][] без указания размера второго измерения и затем передавать этот массив в качестве параметра. Выходом может служить специальный класс CMatrix, который содержит в себе массив объектов класса CRow.

schreibt der Compiler:

object of 'CMatrix' cannot be returned, copy constructor 'CMatrix::CMatrix(const CMatrix &)' not found tst.mq5 244 14

object of 'CMatrix' cannot be returned, copy constructor 'CMatrix::CMatrix(const CMatrix &)' not found tst.mq5 261 11

object of 'CMatrix' cannot be returned, copy constructor 'CMatrix::CMatrix(const CMatrix &)' not found tst.mq5 281 14

object of 'CMatrix' cannot be returned, copy constructor 'CMatrix::CMatrix(const CMatrix &)' not found tst.mq5 303 11

4 Fehler, 0 Warnung(en) 5 1




Документация по MQL5: Основы языка / Функции / Перегрузка операций
Документация по MQL5: Основы языка / Функции / Перегрузка операций
  • www.mql5.com
Перегрузка операций позволяет использовать операционную нотацию (запись в виде простых выражений) к сложным объектам - структурам и классам. Запись выражений с использованием перегруженных операций упрощает восприятие исходного кода, так как более сложная реализация сокрыта. Для примера рассмотрим широко применяемые в математике комплексные...
 

Kompilierungsfehler (ME\1881\32)

template<typename T>
class B;
template<typename T>
class A {
        B<int> *f() { return NULL; }
};
template<typename T>
class B : public A<T> {}; //Error: 'A' - struct undefined
void OnStart()
{
        A<int> *a;
        B<int> *b;
}

Und so:

void OnStart()
{
        B<int> *b;
        A<int> *a;
}
gut. Welchen Unterschied macht das?
 
fxsaber:

Das ist nicht der Grund.

Dies ist beim Lesen von Code sehr hilfreich und hilft in manchen Situationen, Fehler zu vermeiden.

Beachten Sie, dass dies in MQL nicht überall funktioniert:

class A { protected:
        int a;
};
class B : public A {
        int a;
        void f1() { this.a    = 0; } //нормально
        void f2() { this.A::a = 0; } //Error: '::' - syntax error
};

dass es in C++ ohne Fehler kompiliert wird

 
A100:

Beachten Sie, dass dies in MQL nicht überall funktioniert:

die sich in C++ ohne Fehler kompilieren lässt

C++ hat ein Händchen für Perversionen. Vielleicht könnte dies irgendwo in Makros verwendet werden, aber nicht direkt.

 
In der oberen rechten Ecke sehe ich ständig ein Symbol, das mir sagt, dass ich ungelesene PMs habe. Es gibt keine Möglichkeit, sie zurückzusetzen - sie ist gelesen. Bitte fügen Sie eine Schaltfläche "Alle zum Lesen bringen" hinzu.
 
fxsaber:

Es ist vielleicht möglich, dies irgendwo in Makros zu verwenden, aber nicht direkt.

Makros haben damit überhaupt nichts zu tun - ersetzen Sie dies durch einen normalen Zeiger und Sie haben genau die gleiche Syntax:

struct A {
        int x;
};
struct B : A {
        int x;
};
void OnStart()
{
        B b;
        b.A::x = 1; //Error: '::' - syntax error
}
In MQL können Sie nicht explizit auf b.A::x verweisen, während Sie das in C++ können. Warum eine solche Einschränkung?
 
A100:

Makros haben damit überhaupt nichts zu tun - ersetzen Sie diese durch einen gewöhnlichen Zeiger und Sie haben genau die gleiche Syntax:

In diesem Fall ist es gerechtfertigt. Bei dieser Variante ist nicht klar, warum man sie so schreibt. Wenn A:: schon alles sagt.