Fehler, Irrtümer, Fragen - Seite 2045
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
Aber ich habe dort die falsche Array-Dimension eingestellt, vielleicht hat sich das irgendwie ausgewirkt (obwohl es sich gar nicht auswirken sollte).
Versuchen Sie dies mit Dimension = 3
Ich habe die Ursache der Diskrepanz entdeckt. Bei OPTIMIZE=0 tritt ein Fehler auf, aber nicht bei OPTIMIZE=1. Ich verwende normalerweise nur OPTIMIZE=0
Wenn ich eine logische (nicht widersprüchliche) Erklärung für das Ergebnis finde, sehe ich den Fehler nicht. Ich denke nicht, dass es akzeptabel ist, einen Fehler zu beweisen, wenn das Ergebnis nicht mit C++ übereinstimmt. Es ist in C++, dass jemand so gedacht und es getan hat. Aber vielleicht dachten sie nicht so und haben es deshalb nicht getan. Deshalb ist es besser, sich nicht auf etwas da draußen zu beziehen, sondern sich auf die eigene innere Vorstellung von dem zu verlassen, was sein muss. Und es ist wünschenswert, dass dieses "Eigene" auch wirklich das Eigene ist. Das ist nicht das Ergebnis einer unmerklichen Auferlegung von Stereotypen, wie es sein sollte", wenn man Programmiererfahrung sammelt.
Wenn Sie keine eigene Erklärung haben, bedeutet dies, dass kein Fehler vorliegt. Und wenn diese Erklärung ein Jahr später auftaucht und ziemlich überzeugend ist, muss dann jeder alles neu machen? In C++ haben sie schon hundertmal darüber nachgedacht, warum man es so und nicht anders macht. Und die Erklärung ist erforderlich, wenn etwas in MQL anders eingerichtet ist als in C++ und nicht umgekehrt.
Aber nicht eine Funktion.
Dann sollten statische Klasseninstanzen verboten werden - denn sie werden durch eine Konstruktorfunktion initialisiert
Und hier noch mehr zum Thema der Variableninitialisierung. Wenn Sie sich an die Angaben in der Dokumentation halten, können Sie auch nicht auf andere globale/statische Variablen verweisen. Da es sich nicht um einen konstanten Ausdruck handelt:
Aber im Moment funktioniert es. Und ich vermute, dass viele Menschen schon immer solche Konstrukte verwendet haben, ohne sich dessen bewusst zu sein. Aber es stellt sich heraus, dass die Entwickler sie jederzeit deaktivieren können. Und wie bei der Funktionsinitialisierung werden diese Codes zwar immer noch erfolgreich kompiliert, aber sie funktionieren nicht mehr richtig. Alles in allem ist die gesamte MMS eine Zeitbombe.
Und hier noch etwas zur Initialisierung von Variablen. Wenn Sie sich an die Angaben in der Dokumentation halten, können Sie auch nicht auf andere globale/statische Variablen verweisen. Denn es handelt sich nicht um einen konstanten Ausdruck:
wird durch eine Konstruktorfunktion initialisiert - Verbieten!
Dies ist der Fall, wenn man die letzten Beiträge logisch zusammenfasst
Ich habe den Grund für diese Diskrepanz herausgefunden. Bei OPTIMIZE=0 tritt ein Fehler auf, aber nicht bei OPTIMIZE=1. Ich verwende immer nur OPTIMIZE=0.
Im 32-Bit-Terminal tritt ein Fehler bei jeder OPTIMIZE
wird durch eine Konstruktorfunktion initialisiert - Verbieten!
Dies ist der Fall, wenn man die letzten Beiträge logisch zusammenfasst
Nun, die Person hat sich da einfach falsch ausgedrückt. Natürlich handelt es sich um einen Initialisierungswert und nicht um eine Initialisierungsfunktion.
Und zum Teufel mit ihnen - Verbote. Sie verursachen nicht von sich aus Probleme. Wenn dieses Verbot aber in keiner Weise vom Compiler kontrolliert wird, sondern einen Algorithmus erzeugt, der die Sprachregeln umgeht, passt es überhaupt nicht. Jetzt müssen Sie den gesamten Code nach solchen Dingen durchsuchen und ständig auf der Hut sein. Scheiß auf diese Art der Programmierung, ich bleibe lieber bei der alten Version.
Verstehe, dann entschuldige ich mich, ich habe es nicht sofort bemerkt. Ich bin natürlich erstaunt, wie sie es geschafft haben, es heimlich zu ändern und es niemandem zu sagen. Was ich nicht verstehe, ist, warum der Compiler nicht auf die Ausführung einer ungültigen Operation reagiert. Das heißt, der Fehler ist in jedem Fall vorhanden.
Und hier noch mehr zum Thema der Variableninitialisierung. Wenn Sie sich an die Angaben in der Dokumentation halten, können Sie auch nicht auf andere globale/statische Variablen verweisen. Da es sich nicht um einen konstanten Ausdruck handelt:
Aber im Moment funktioniert es. Und ich vermute, dass viele Menschen schon immer solche Konstrukte verwendet haben, ohne sich dessen bewusst zu sein. Aber es stellt sich heraus, dass die Entwickler sie jederzeit deaktivieren können. Und wie bei der Funktionsinitialisierung werden diese Codes zwar immer noch erfolgreich kompiliert, aber sie funktionieren nicht mehr richtig. Alles in allem ist der gesamte MQL-Code eine Mine, die in Zeitlupe arbeitet.
Na ja... In diesem Beispiel gibt es keine Diskrepanz zu der Beschreibung in der Dokumentation... Schauen Sie sich das Zitat aus der Dokumentation genau an
oder durch einen konstanten Ausdruck
Diese Initialisierung ist möglich. Denn die Variable 'a' wird durch eine Konstante initialisiert und die Variable 'b' durch einen konstanten Ausdruck.
Dann müssen Sie statische Instanzen von Klassen verbieten, da diese durch eine Konstruktorfunktion initialisiert werden
Achten Sie auf
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Wanzen, Wanzen, Fragen
Alexey Viktorov, 2017.10.18 09:19
Warum glauben Sie, dass Sie sich verändert haben, warum ist es inakzeptabel? Bitte verwenden Sie sie nach eigenem Ermessen. Das ganze Problem besteht darin, dass bei der Initialisierung einer statischen Variablen durch eine Funktion die Initialisierung "angehalten" und die Funktion ausgeführt wird. Und im obigen Beispiel gibt es noch eine statische Variable in dieser Funktion, die noch nicht initialisiert wurde. Eine Variable, die durch eine Funktion initialisiert wird, nimmt also einen anderen Wert an.