
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Wenn alle Schaltflächen jeweils nur mit einer Zeile arbeiten, erstellen Sie eine statische Variable in der Schaltflächenklasse, um die Zeile zu referenzieren. Aber nur das ist nicht sinnvoll, weil es die Möglichkeiten der Schaltflächenklasse einschränkt - man kann nicht zwei Paare von Schaltflächen erstellen, um mit zwei Zeilen parallel zu arbeiten.
Und die richtige Lösung für das Problem ist elementar - schreiben Sie eine Funktion, die Referenz auf die Zeile wird an die Funktion übergeben, und die Funktion übergibt diese Referenz an die gewünschten Schaltflächenobjekte. Sie brauchen keine Wunder in OOP zu suchen.
Oder Sie können eine Klasse schreiben, die zwei Schaltflächen erstellt.
Wenn alle Schaltflächen jeweils nur mit einer Zeile arbeiten, erstellen Sie eine statische Variable in der Schaltflächenklasse, um die Zeile zu referenzieren. Aber das allein macht keinen Sinn, weil es die Möglichkeiten der Button-Klasse einschränkt - man kann nicht zwei Button-Paare erstellen, um mit zwei Zeilen parallel zu arbeiten.
Ja, ich habe vier Tastenpaare und vier Zeilen, also habe ich auch die statische Variable als Option verworfen.
Und die richtige Lösung des Problems ist elementar: Schreiben Sie eine Funktion, der Link zur Zeile wird an die Funktion übergeben, und dieser Link wird an die gewünschten Schaltflächenobjekte in der Funktion übergeben. Sie brauchen keine Wunder in OOP zu suchen.
Nun, oder schreiben Sie eine Klasse, die zwei Schaltflächen erstellt.
Und ich glaubte an die Wunder von OOP).
Danke für diese Optionen, ich werde darüber nachdenken, welche für mich am besten geeignet wäre.
Helfen Sie mir, ein Problem zu lösen. Es gibt zwei Tasten und eine Linie. Wenn Sie eine Taste drücken, wird die Zeile in den Bearbeitungsmodus versetzt, und wenn Sie sie loslassen, wird die Zeile gelöscht. Die zweite Schaltfläche fixiert die Zeile, wenn sie angeklickt wird, und schaltet sie wieder in den Bearbeitungsmodus, wenn sie angeklickt wird. Jede Schaltfläche kann die Farbe und einige andere Eigenschaften des Linienobjekts ändern. Das Objekt "Linie" ist global definiert. Ist es möglich, eine Referenz auf das "Line"-Objekt an jede Schaltfläche unmittelbar nach der Erstellung von Schaltflächen zu übergeben, so dass bei der Bearbeitung der Referenzvariablen innerhalb der "Button"-Objekte alle Änderungen im globalen "Line"-Objekt gespeichert werden.
Im Folgenden habe ich ein vereinfachtes Skript skizziert, das anstelle eines Tastendrucks die Funktion addition() enthält, die den Zähler des Objekts "Line" erhöht. Ich verstehe, dass man das "Line"-Objekt als Funktionsargument per Referenz übergeben kann, aber gerade in der Arbeitsversion gibt es mehrere solcher Funktionen, so dass ich die Referenz am Anfang einmal übergeben möchte. Ist es z.B. möglich, dass Btn1.addition() oder Btn2.addition() die gLine.count erhöht?
So mache ich es jetzt auch:
Vielleicht ist dies der richtige Weg?
2019.07.04 00:44:30.464 1 (EURUSD,H1) Line.count=196
2019.07.04 00:44:30.464 1 (EURUSD,H1) Line.count=197 Btn1.m_Line.count=197
2019.07.04 00:44:30.464 1 (EURUSD,H1) Line.count=198 Btn2.m_Line.count=198
2019.07.04 00:44:30.464 1 (EURUSD,H1) Line.count=199 Btn1.m_Line.count=199
2019.07.04 00:44:30.464 1 (EURUSD,H1) Line.count=200 Btn2.m_Line.count=200
2019.07.04 00:44:31.856 1 (EURUSD,H1) Line.count=200
2019.07.04 00:44:31.856 1 (EURUSD,H1) Line.count=201 Btn1.m_Line.count=201
vielleicht sollte es so sein?
2019.07.04 00:44:30.464 1 (EURUSD,H1) Line.count=196
2019.07.04 00:44:30.464 1 (EURUSD,H1) Line.count=197 Btn1.m_Line.count=197
2019.07.04 00:44:30.464 1 (EURUSD,H1) Line.count=198 Btn2.m_Line.count=198
2019.07.04 00:44:30.464 1 (EURUSD,H1) Line.count=199 Btn1.m_Line.count=199
2019.07.04 00:44:30.464 1 (EURUSD,H1) Line.count=200 Btn2.m_Line.count=200
2019.07.04 00:44:31.856 1 (EURUSD,H1) Line.count=200
2019.07.04 00:44:31.856 1 (EURUSD,H1) Line.count=201 Btn1.m_Line.count=201
Ja, Igor, das war's, vielen Dank.
Ich bin immer noch "floundering" in Zeigern, daher Ihre Lösung wird mir helfen, in meiner aktuellen Aufgabe und in das Verständnis, wieman Zeiger zu verwenden.
Wir danken Ihnen für Ihr Feedback.
vielleicht sollte es so sein?
2019.07.04 00:44:30.464 1 (EURUSD,H1) Line.count=196
2019.07.04 00:44:30.464 1 (EURUSD,H1) Line.count=197 Btn1.m_Line.count=197
2019.07.04 00:44:30.464 1 (EURUSD,H1) Line.count=198 Btn2.m_Line.count=198
2019.07.04 00:44:30.464 1 (EURUSD,H1) Line.count=199 Btn1.m_Line.count=199
2019.07.04 00:44:30.464 1 (EURUSD,H1) Line.count=200 Btn2.m_Line.count=200
2019.07.04 00:44:31.856 1 (EURUSD,H1) Line.count=200
2019.07.04 00:44:31.856 1 (EURUSD,H1) Line.count=201 Btn1.m_Line.count=201
Und warum verwenden Sie GetPointer(gLine), wenn Sie selbst gLine als Zeiger deklariert haben? )))
Bei der Deklaration muss auch das CLine-Objekt erstellt werden:
CLine* gLine=neue CLine;
Die Schaltfläche und die Zeile müssen ebenfalls in der Phase der Initialisierung der Schaltfläche initialisiert werden.
... CMyButton(CLine* line):m_Line(!CheckPointer(line)?NULL:line){}; ... CLine* gLine=new CLine; CMyButton Btn1(gLine);
Warum verwenden Sie GetPointer(gLine), wenn Sie selbst gLine als Zeiger deklariert haben? )))
Die Bildung eines CLine-Objekts ist auch eine dringende Aufgabe, wenn es deklariert wird:
CLine* gLine=neue CLine;
Die Schaltfläche und die Zeile sollten ebenfalls in der Phase der Initialisierung der Schaltfläche initialisiert werden.
Es war nachts, es ist nicht klar, warum ich es so geschrieben habe... Ich habe eigentlich geschlafen, aber Skype auf meinem Handy hat mich geweckt, also habe ich das Forum nur überflogen )))
Und ernsthaft, mein Beispiel ist ein Tutorial, ich habe es nicht überprüft, vielleicht habe ich auf einer unterbewussten Ebene rückversichert, ich verstehe nicht ganz, was ein MQL-Zeiger ist, es funktioniert offensichtlich nicht wie in C++ Zeiger
Ich habe versucht, es herauszufinden, aber ich habe nicht herausfinden, wie Zeiger als Parameter für diehttps://www.mql5.com/ru/forum/1111/page2470#comment_11796309 Funktion arbeiten - ich übergebe einen Zeiger an die Funktion gibt, aber in der Tat bekomme ich eine neue Kopie des Zeigers erstellt
SZY: Ich kann nicht herausfinden, welchen Umfang MQL-Zeiger haben, ich habe auch gefragthttps://www.mql5.com/ru/forum/1111/page2488#comment_12154218.... Ich scheine nicht zu verstehen, welche Fälle einen lokalen und welche einen globalen Anwendungsbereich haben ... Alles in allem, ich arbeite mit MQL-Zeigern nach der wissenschaftlichen Methode (((
Ja, Igor, das war's, vielen Dank.
Ich bin immer noch "schwimmen" in Zeigern, das ist, warum Ihre Lösung wird sehr hilfreich für mich in meiner aktuellen Aufgabe und in weiteres Verständnis für die Verwendung von Zeigern sein.
Wir danken Ihnen für Ihr Feedback.
Bitte! mit MQL-Zeiger nur Praxis wird hier helfen, Sie haben eigentümliche Verhalten, wie@Vladimir Simakov schrieb Ihr Problem ist am ehesten durch das Schreiben eines Konstruktors mit Parameter gelöst werden - ich in der Regel tun so, aus abstrakter Sicht? - Es ist nicht korrekt, aber es ist bequem und funktioniert immer korrekt - und der Compiler lässt Sie nicht vergessen, den Zeiger zu binden.
if(CheckPointer(m_Line)==POINTER_DYNAMIC)
Diese Prüfung kann entfallen, da Sie den Zeiger beim Aufruf des Konstruktors ohnehin speichern.
Wow, es stellt sich heraus, dass die Aufgabe nicht darin bestand, darauf zu warten, dass zwei Objekte gleichzeitig einen Zeiger auf eine Zeile übergeben. Es ging eigentlich um die Übergabe eines Zeigers. Wer hätte das gedacht?
Sie brauchen das Objekt nicht mit new zu erstellen, um einen Zeiger irgendwo zu übergeben. Die Klasse, an die der Zeiger übergeben wird, muss jedoch eine Zeigervariable (mit einem Sternchen *) haben.
es war nachts, es ist dunkel - deshalb habe ich es so geschrieben... Ich habe eigentlich geschlafen, aber Skype auf meinem Handy hat mich geweckt, so dass ich das Forum nur flüchtig überflogen habe )))
Und ernsthaft, mein Beispiel ist ein Tutorial, ich habe es nicht überprüft, vielleicht habe ich auf einer unterbewussten Ebene rückversichert, ich verstehe nicht ganz, was ein MQL-Zeiger ist, es funktioniert offensichtlich nicht wie in C++ Zeiger
Ich habe versucht, es herauszufinden, aber ich habe nicht herausfinden, wie Zeiger als Parameter für die Funktionhttps://www.mql5.com/ru/forum/1111/page2470#comment_11796309 arbeiten - ich einen Zeiger an die Funktion dort übergeben, aber in der Tat bekomme ich eine neue Kopie des Zeigers erstellt
SZY: Ich kann nicht herausfinden, welchen Umfang MQL-Zeiger haben, ich habe auch gefragthttps://www.mql5.com/ru/forum/1111/page2488#comment_12154218.... Ich scheine nicht zu verstehen, welche Fälle einen lokalen und welche einen globalen Anwendungsbereich haben ... Alles in allem arbeite ich mit MQL-Zeigern nach der Methode des wissenschaftlichen Experiments (((
Im ersten Fall ist alles ganz einfach. Sie erstellen ein neues dynamisches Objekt auf dem Stack, und das ist alles. Sie müssen es in den ...(CObj* &jbj,...
Und im zweiten Fall müssen Sie es tun:
void AddValue (T &value) { Tptr = value; mlist.Add(Tptr); }
Im ersten Fall ist es ganz einfach. Sie erstellen ein neues dynamisches Objekt auf dem Stack und das war's. Sie sollten es in die ...(CObj* &jbj,...
Und im zweiten Fall sollten Sie es tun:
Ich werde das heute Abend überprüfen, die Referenz gibt nicht viele Informationen über die Verwendung von &.
Ich danke Ihnen!