Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1333
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
Danke für die Antwort, du bist gar nicht böse)
Jetzt macht das alles Sinn)
UPD
Diese Konstruktion funktioniert auch
Achten Sie darauf, was die Methode At() zurückgibt. Wenn es NULL zurückgibt, stürzt man bei einem kritischen Fehler ab. Vor dem Zugriff auf einen Zeiger auf ein Objekt ist zu prüfen, ob dieser nicht NULL ist
Bereits bemerkt)
Die Lösung besteht also darin, global leere Objekte zu deklarieren....
Und wenn man vorher nicht weiß, wie viele es sein werden? Einfach "mit Reserve" deklarieren ? :)
P.S. Ich habe diese Art der Deklaration von Objekten nicht in der integrierten Hilfe gefunden
Vor einiger Zeit schrieb mir Artyom diesen Kurs. Ich kann nicht im Detail erklären, wie es funktioniert. Aber Artem wird sich daran erinnern und wird es erklären können. Hier ist die Klasse selbst
Und hier ist die Schleife zur Erstellung von Zeigern in OnInit()
und in OnTimer()
ArraySize(Rates) ist die Größe des Arrays von Strukturen, in denen die zu bearbeitenden Zeichen aufgelistet sind.
Artyom schrieb mir einmal diese Klasse. Ich kann nicht im Detail erklären, wie es funktioniert. Aber Artyom wird sich daran erinnern und wird es erklären können. Hier ist die Klasse selbst
Und hier ist die Schleife zur Erstellung von Zeigern in OnInit()
und in OnTimer()
ArraySize(Rates) ist die Größe des Arrays von Strukturen, in dem die zu bearbeitenden Zeichen aufgelistet sind.
Hier:
Ich würde vor insgesamt tun - einfach aus dem Grund, dass Sie Zeichen aus dem Array Rates (richtig?) lesen, Instanzen der neuen Bar-Klasse erstellen und sie der Liste hinzufügen.
Bei einem Additionsfehler stimmt die Größe der Liste von Zeigern auf Instanzen der neuen Balkenklasse nicht mit der Größe des Arrays Rates überein.
Im Allgemeinen muss es in etwa so aussehen:
Und auch hier müssen Sie prüfen, ob Sie die Liste erfolgreich ergänzen können:
etwa so:
um Speicherlecks zu vermeiden, wenn ein Zeiger auf ein neues Objekt versehentlich zur Liste hinzugefügt wirdHier:
Ich würde vor insgesamt tun - einfach aus dem Grund, dass Sie Zeichen aus dem Array Rates lesen (richtig?), erstellen Sie Instanzen der neuen bar-Klasse und fügen Sie sie der Liste.
Bei einem Additionsfehler stimmt die Größe der Liste von Zeigern auf Instanzen der neuen Balkenklasse nicht mit der Größe des Arrays Rates überein.
Im Allgemeinen muss es in etwa so aussehen:
Und auch hier müssen Sie prüfen, ob Sie die Liste erfolgreich ergänzen können:
etwa so:
um Speicherlecks zu vermeiden, wenn ein Zeiger auf ein neues Objekt versehentlich zur Liste hinzugefügt wirdDanke. Ich habe es verstanden, ich werde es so korrigieren:)))
Ich hasse continue; operator und versuche, es nicht zu benutzen. Ausschließlich in hoffnungslosen Fällen.
wie sie sich unterscheidet von
Eine andere Sache ist, wenn bei einem Fehler der fehlgeschlagene Zeiger gelöscht wird... Aber auch hier können wir auf das verhasste Continue verzichten; einfach durch Löschen von Print(). Es wurde während der Fehlersuche benötigt, und wenn während der Arbeit ein Fehler auftritt, verstehe ich sowieso nicht, was los ist... Es ist einfacher, das Betriebssystem neu zu installieren als die Protokolle zu verstehen.Da wir gerade beim Thema sind, sagen Sie mir bitte, ohne ins Detail zu gehen, was der Unterschied zwischen einem Zeiger und einer Klassenvariablen ist und was vorzuziehen ist. Ich kann im Internet Details darüber lesen, die schwer zu verstehen sind. Ein oberflächliches Verständnis reicht mir sozusagen aus...
Achten Sie darauf, was die Methode At() zurückgibt. Wenn es NULL zurückgibt, stürzt man bei einem kritischen Fehler ab. Vor dem Zugriff auf einen Zeiger auf ein Objekt ist zu prüfen, ob dieser nicht NULL ist.
Artem, danke für die wertvolle Bemerkung)
Ich danke Ihnen. Ich verstehe, ich bringe das so in Ordnung... :)))
Ich hasse den "Continue"-Operator und versuche, ihn nicht zu benutzen. Ausschließlich in hoffnungslosen Fällen.
Wie unterscheidet sie sich von
Die Iteration der Schleife wird nicht beendet und es wird auch keine neue gestartet, sondern es wird zur nächsten Iteration übergegangen. Die Logik wird sich ändern.
Artyom schrieb mir einmal diese Klasse. Ich kann nicht im Detail erklären, wie es funktioniert. Aber Artyom wird sich daran erinnern und wird es erklären können. Wie auch immer, hier ist die Klasse selbst
Alexey, ich danke dir für deine ausführliche Antwort.
Der Zweck der ret-Variable in dem zitierten Codefragment ist unklar...
Wofür wird es berechnet, wenn die Methode auf jeden Fall array[0] zurückgibt?
P.S.
Und warum wird dies in einer Klassenmethode verwendet? Wir arbeiten mit Mitgliedern dieser besonderen Klasse...
Ich danke Ihnen. Ich verstehe, ich bringe das so in Ordnung... :)))
Ich hasse den "Continue"-Operator und versuche, ihn nicht zu benutzen. Ausschließlich in hoffnungslosen Fällen.
wie sie sich unterscheidet von
Eine andere Sache ist, wenn Sie bei einem Fehler den fehlgeschlagenen Zeiger löschen... Aber auch hier können Sie auf das gehasste continue verzichten; löschen Sie einfach Print(). Es wurde während der Fehlersuche benötigt, und wenn während der Arbeit ein Fehler auftritt, verstehe ich sowieso nicht, was los ist... Lieber installiere ich das Betriebssystem neu, als die Protokolle zu verstehen.Da wir gerade beim Thema sind, sagen Sie uns bitte, ohne ins Detail zu gehen, was der Unterschied zwischen einem Zeiger und einer Klassenvariablen ist und was vorzuziehen ist. Ich kann im Internet Details darüber lesen, die schwer zu verstehen sind. Ein oberflächliches Verständnis reicht mir sozusagen aus.
Die Iteration des Zyklus endet nicht, und es beginnt auch keine neue, sondern es wird zum nächsten Wenn übergegangen. Die Logik wird sich ändern.
Alexey, vielen Dank für diese ausführliche Antwort.
Der Zweck der ret-Variable in dem angegebenen Codefragment ist nicht klar...
Warum wird sie berechnet, wenn die Methode sowieso array[0] zurückgibt?