Diskussion zum Artikel "Grafische Interfaces XI: Integration der graphischen Standardbibliothek (build 16)" - Seite 8
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 habe versucht, die Datei ElementBase.mqh zu ändern, aber sie schimpft noch mehr.
Ich habe versucht, die Datei ElementBase.mqh zu ändern, aber sie schimpft noch mehr.
Sowohl ElementBase.mqh als auch Element.mqh müssen geändert werden.
In den letzten Builds haben wir dem Compiler eine Meldung für die Fälle hinzugefügt, in denen eine Vorgängermethode in einem Nachkomme überladen wird:
Beispiel
In diesem Fall wird die Funktion func(int) des Vorfahren SFoo in der Nachfolgeklasse SBar aufgerufen, weil der Compiler sie in der Nachfolgeklasse nicht gefunden hat. Die Nachfolgeklasse hat nur die Funktion func(double) und der Compiler versucht, eine Funktion mit einem geeigneten Parameter im Vererbungsbaum zu finden.
Das heißt, der MQL5-Compiler führt eine Überladung durch, anstatt die Methode im Nachfahren zu überschreiben. Zu Beginn der Sprachentwicklung wurde diese Lockerung des MQL5-Compilers nicht als kritisch angesehen. Sie kann sich aber in der Zukunft ändern, so dass jetzt eine ausdrückliche Warnung an die Entwickler von MQL5-Programmen ausgegeben wird, um ihre Codes zu berücksichtigen und zu korrigieren.
Streng genommen ist Overriding ein etwas weiter gefasster Begriff, den Unterschied zwischen Overloading und Overriding können Sie im Internet unter
nachlesen.
1. Ist es richtig, dass solcher Code nicht kompiliert wird?
2. Ist es richtig, dass dieser Code, zusätzlich zu dem oben erwähnten Fehler, die Warnung "deprecated behaviour, hidden method calling will be disabled in a future MQL compiler version TestCompiler.mq5 27 18" erzeugt?
1. Ist es richtig, dass solcher Code nicht kompiliert wird?
2. Ist es richtig, dass dieser Code zusätzlich zu dem obigen Fehler die Warnung "deprecated behaviour, hidden method calling will be disabled in a future MQL compiler version TestCompiler.mq5 27 18" erzeugt?
Vielleicht ist es besser, diese Frage in dem Thread über die neue Version des Terminals zu stellen? ) Ich denke, sie werden dort schneller antworten.)
Die Warnung scheint in die neue Logik des Compilers zu passen, aber ich verstehe das mit dem privaten Mitglied nicht, es ist immer noch öffentlich...
Sowohl ElementBase.mqh als auch Element.mqh müssen geändert werden
In ElementBase.mqh ist es klar, dass Sie "Is" durch "Set" ersetzt haben (aber es ist nicht klar, warum wir das tun können).
aber in Element.mqh gibt es eine weitere Zeile
In ElementBase.mqh ist es klar, dass Sie "Is" durch "Set" ersetzt haben (aber es ist nicht klar, warum wir das tun können)
aber in Element.mqh gibt es eine weitere Zeile
Nun, MQ mag keine gleichen Namen (Variablen, Methoden, etc.) :)
Wir haben nur den Namen der Methode geändert (und warum nicht? ) ) )
Wir wollen nichts ändern - wir warten darauf, dass der Autor alles neu macht ) )
Der Autor ist wahrscheinlich "fertig" mit diesem Projekt, können Sie angeben, in welchen Zeilen, was zu schreiben, so dass der Compiler nicht fluchen, und besser natürlich orthodox (korrigiert) Dateien ( ElementBase.mqh und in Element.mqh) für die Menschen
1. Ich stecke gerade mitten in einem anderen Projekt.
2. Ich habe die Bibliothek sehr stark verändert )
Nun, neben den Änderungen in ElementBase.mqh und Element.mqh solltest du alle Elemente durchgehen, vielleicht gibt es diese Methoden auch dort.
Vielleicht ist es besser, in dem Thread über die neue Version des Terminals zu fragen? ) Ich denke, sie werden dort schneller antworten )
Die Warnung scheint in die neue Logik des Compilers zu passen, aber ich verstehe das mit dem privaten Mitglied nicht, es ist immer noch öffentlich...
Ich habe dort einen Workaround gefunden:
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Neue Version von MetaTrader 4 build 1170
fxsaber, 2019.09.06 09:39 Uhr.
Ich glaube, dass die vorgeschlagene Option in MT5 eine Neuerung ist, die auch in MT4 hinzugefügt werden sollte.
Aber wenn man den Code auf die altmodische Weise schreibt, wird er überall funktionieren.
So funktioniert mein Beispiel:
CC(void) { ((CA)m_b).func(); }Aber das ist natürlich keine Lösung.
@Ilyas, keine Option ohne Umstellung auf CA?