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
Ich bin auf ein Call-Stack-Overflow-Problem gestoßen (so glaube ich).
Nach dem Aufruf einer Methode eines der Objekte, siehe Beispiel unten. Der Code ist vereinfacht, nur das Wesentliche. Die Klasse CClass1 ist eine Basisklasse und list1 hat verschiedene Objekte, die von dieser Klasse abstammen und deren Init-Funktionen unterschiedlich implementiert sind. In einer Klasse, in der die init-Funktion eine solche Liste abruft (um es einfach auszudrücken, initialisiert sie eine verschachtelte Schnittstelle, ein Panel im Panel), nachdem sie von init in der Zeile
es liegt ein Fehler vor
2010.12.02 00:21:00 test1 (EURUSD,H1) Ungültiger Zeigerzugriff in 'Container.mqh' (74,10)
D.h. der Zeiger t ist tot.
Beim Debuggen tritt kein solcher Fehler auf, nach dem Methodenaufruf ist der Zeiger "lebendig", verschachtelte Schnittstellen werden erstellt und Expert Advisor arbeitet weiter.
Dies ist die einzige Möglichkeit, den Fehler zu umgehen:
#property stacksize pointer hat nichts gebracht.Es ist schwer, etwas mit Sicherheit zu sagen. Sie benötigen den Quellcode.
Versuchen Sie, eine Anfrage an servicedesk zu schreiben.
Ich kam aus dem Urlaub zurück, startete Terminals, aktualisierte auf die 360er Version und ein Indikator funktionierte nicht mehr...
Ich habe die Änderungen gelesen: 6. MQL5: Feste Verarbeitung des Klick-Ereignisses in einem Diagramm.
Wenn Sie auf ein grafisches Objekt klicken, werden jetzt zwei Ereignisse gleichzeitig erzeugt: CHARTEVENT_OBJECT_CLICK + CHARTEVENT_CLICK, während es vorher nur ein CHARTEVENT_OBJECT_CLICK gab, was es ermöglicht, einen Doppelklick zu simulieren
Wird das immer so sein oder ist das ein Fehler?
Ich kam aus dem Urlaub zurück, startete die Terminals, aktualisierte auf den 360er Build und ein Indikator funktionierte nicht mehr...
Änderungen einlesen: 6. MQL5: Korrigierte Verarbeitung des Klick-Ereignisses in einem Diagramm.
Wenn Sie auf ein grafisches Objekt klicken, werden jetzt zwei Ereignisse gleichzeitig erzeugt: CHARTEVENT_OBJECT_CLICK + CHARTEVENT_CLICK, während es vorher nur ein CHARTEVENT_OBJECT_CLICK gab, was es ermöglicht, einen Doppelklick zu simulieren
Wird das immer so sein oder ist das ein Fehler?
Wieder einmal stieß ich auf die Mauer der Unmöglichkeit,
Ich muss einen Parameter an den Konstruktor übergeben, so dass die Klasse mit bestimmten Parametern initialisiert wird,
Wie kann ich dieses Problem umgehen? Was empfehlen Sie?
Wieder einmal stieß ich auf die Mauer der Unmöglichkeit,
Ich muss einen Parameter an den Konstruktor übergeben, damit die Klasse mit bestimmten Parametern initialisiert werden kann,
Wie kann ich dieses Problem umgehen?
к
Nun, ich sehe keinen anderen Ausweg.
und natürlich müssen Sie bei geerbten Klassen die Inits in die richtige Reihenfolge bringen
Ich wünschte, sie würden einen Artikel über die Fehlerbehandlung in komplexen Projekten schreiben,Drucken und zurückgeben, wie hier ist nicht die Lösung.
Nun, ich sehe keinen anderen Ausweg.
Und natürlich müssen Sie bei geerbten Klassen die Inits in die richtige Reihenfolge bringen
Generell würde ich mir wünschen, dass sie einen Artikel über Fehlerbehandlung in komplexen Projekten schreiben, Print und Return ist hier nicht die Lösung.
Das heißt, es soll ein Vorkonstruktor erstellt werden, der den Konstruktionsprozess abschließt und der wiederum ein Initialisierungskennzeichen anzeigt.
Im Allgemeinen ist dies eine gute Lösung, aber es gibt einige Unannehmlichkeiten. Wir müssen jede Funktion mit einem Initialisierungsflag abfragen, und bei einer großen Anzahl von Klassenfunktionen ist das nicht praktisch.
Was ist, wenn wir etwas ändern müssen? Dann müssen alle Funktionen neu geschrieben werden.
SZ Ich habe den Code bearbeitet und den Tippfehler korrigiert.
D.h. einen Vorkonstruktor erstellen, der den Konstruktionsprozess abschließt und der wiederum ein Initialisierungsflag setzt.
Im Allgemeinen ist es in Ordnung, aber es gibt einige Unannehmlichkeiten. Wir müssen jede Funktion nach dem Initialisierungskennzeichen abfragen, und bei einer großen Anzahl von Klassenfunktionen ist das nicht sehr praktisch.
Der Code für das erste Mal wurde auf dieselbe Weise aktualisiert wie für das zweite Mal.
SZ Ich habe den Code bearbeitet und das Versehen behoben.
Nun, wenn es einen Konstruktor gäbe, würde das nicht bedeuten, dass die Initialisierung erfolgreich war. In jedem Fall müssen Sie die Tatsache der Initialisierung überprüfen
Natürlich können Sie es einmal überprüfen:
Aber wenn Sie Ihren eigenen Code verwenden, können Sie es zu einer Regel machen, die Tatsache der Initialisierung zum Zeitpunkt des Aufrufs zu überprüfen, und wenn er von anderen verwendet wird, können Sie nicht in Anweisungen schreiben: "Sie müssen nur diese Konstruktion verwenden, sonst kann ich nicht für die Folgen garantieren". Nein, Sie müssen ohnehin die Initialisierung in Klassenmethoden überprüfen.
An die Entwickler.
Unmittelbar nach dem Neustart des neuen Builds
PS
Das Update des Terminals, das in einem anderen Ordner installiert wurde, war erfolgreich, die Symbole sind in der Liste (aber es gab keine offenen Charts vor dem Update)...
Sagen Sie mir, ob es sich um einen Fehler handelt oder ob es nicht erlaubt ist.
Es gibt einen Fehler
Bitte sagen Sie mir, ob dies ein Fehler ist oder nicht erlaubt ist.
Sie werden eine Fehlermeldung erhalten
Wahrscheinlich geht es darum, dass ArrayInitialize() nur Arrays eines bestimmten Typs füllen soll, und zwar numerisch (höchstwahrscheinlich int oder double).
Da das Array vom Typ ENUM_ORDER_TYPE ist, wird der Aufruf von ArrayInitialize einen Fehler verursachen, der besagt, dass diese Methode des Aufrufs nicht erlaubt ist.
Meiner Meinung nach gibt es in diesem Fall zwei Möglichkeiten:
1. den Array-Typ ENUM_ORDER_TYPE in int umzuwandeln und gleichzeitig im Code zu berücksichtigen (zumindest Order-Typen können leicht als int dargestellt werden);
2. Unabhängige Implementierung der "Initialisierung" des Arrays.