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
Peter, Sie können mich behandeln, wie Sie wollen, das ist Ihr gutes Recht, aber lassen Sie sich von einem etwas erfahreneren Kameraden beraten.
Die DateiGUI_DRIVE.mqh wird als erste im Code verbunden. Davor wird nichts erklärt.
Wenn Sie es kompilieren, erhalten Sie die Fehlermeldung, dass G_CORE fehlt, und das ist logisch, denn das Array ist in dieser Datei nicht deklariert!
Schlussfolgerung? Die Schlussfolgerung ist einfach: Das Array muss in dieser Datei deklariert werden. Letztendlich ist es diese Datei, die mit diesem Array arbeitet, denn diese Datei ist der "Motor"! Daher ist die Deklaration des Arrays selbst in diesem Kontext korrekt.
Die nächste Datei,CORES.mqh , füllt das Array mit der Beschreibung der Formularelemente.
Wenn das Array in der ersten Datei deklariert wird, gibt es bei der Kompilierung des EA mit diesen Dateien natürlich keine Kompilierungsprobleme, denn wenn Sie die zweite Datei kompilieren, ist das Array bereits im Kontext des Programms sichtbar.
Was wir aber sagen wollen, ist, dass jede Datei ohne Fehler kompiliert werden sollte. Da die zweite Datei das G_CORE-Array mit Elementen füllt, werden wir beim Kompilieren dieser Datei natürlich auf einen Fehler stoßen, wenn das Array nicht deklariert ist.
Und hier verwenden wir, wie Alexander sagte, einen Stummel.
Pjotr, du bist ein großer Fan von Definitionen, also wirst du wissen, was los ist.
In der Datei GUI_DRIVE deklarieren Sie ein globales Array von Kernel-Elementen G_CORE, danach sollte die Datei ohne Fehler kompiliert werden.
In dieser Datei fügen Sie dann eine Definition hinzu.
#define __DRIVE__
Fahren Sie mit der Datei Cores fort. Bevor Sie ein Array deklarieren, verwenden Sie den Präprozessor compile.
Und dann füllen Sie das Feld. Natürlich müssen Sie die Art und Weise, wie Sie das Feld füllen, ein wenig ändern, um es ohne Deklaration zu tun.
Ich denke, Sie haben das Wesentliche verstanden: Wenn die CORES-Datei kompiliert wird, ist der__DRIVE__-Standard weg und der Array-Deklarationscode wird kompiliert und alles funktioniert gut.
Wenn die Datei als Teil des EA kompiliert wird, dann wird nach dem Kompilieren der ersten Datei das Define deklariert und in der zweiten Datei wird das Array nicht deklariert, weil der Compiler diesen Teil des Codes "abschneidet".
Ich hoffe wirklich, dass ich mich klar ausgedrückt habe.
Ich wiederhole es noch einmal: Jede Datei muss ohne Fehler kompiliert werden. Wenn Sie Abhängigkeiten haben, müssen Sie deren Speicherort ordnungsgemäß angeben und bei Bedarf Neukompilierungsprozessoren hinzufügen.
Wenn jede Datei fehlerfrei kompiliert wurde, haben Sie mehr Vertrauen in die Integrität des gesamten Systems.
Vergessen Sie auch nicht, in jeder Datei eine Eigenschaft hinzuzufügen:
Diese Eigenschaft ermöglicht eine strengere Kontrolle des Codes.
Ja, durch Manipulation des Präprozessors können Sie jede Datei separat und fehlerfrei kompilieren.
Es gibt einige Kameraden, die eine separate Software schreiben, die die Oberfläche des Meta-Editors selbst leicht verändert - nur um die Benutzung zu erleichtern!
Diese Norm ist vergleichbar mit der Verwendung einer Tastatur - anstatt Buchstaben im Morsecode durch einen Quietscher zu tippen. Stubs ändern nichts, außer dass sie beim Kompilieren ständig zwischen den Dateien hin und her springen. Aber ein Stub besteht aus 2 Zeilen Code. Wie viel Zeit würden wir mit dem Surfen verbringen, nur um eine Taste zu drücken. Und wie oft werden wir die 7 umdrehen und was wird rationaler werden, damit wir nicht unser Leben damit verschwenden, Buchstaben durch einen Quietscher zu tippen
Dabei geht es nicht um Objekte oder Klassen, sondern nur um Zeitersparnis. Ihre Zeit... Und Sie können sich selbst einen Standard für die Erstellung dieser Dokumente ausdenken.Ganz zu schweigen von der Programmierung in russischer Sprache, die standardmäßig durch die englischsprachige Entwicklungsumgebung diskriminiert wird. Soll ich mich auch anpassen und meinem Gehirn mickrige 30% der Leistung überlassen, während ich im Russischen alle 100% nutzen kann?
Fachleute verwenden ihre eigenen Datentypen in ihrem Code. Im Allgemeinen spielt es keine Rolle, in welcher Sprache sie verfasst sind.
Aber wenn eine Funktion eine ganze Zahl in dieser Reihenfolge erwartet: Akzeptieren (Breite, Höhe).
Stattdessen verwechseln wir es versehentlich und schreiben
Akzeptieren (Höhe, Breite) - dann sagt der Kopierer selbst, dass wir hier eine Verwechslung haben. Ob es für Sie funktioniert - es geht auch nicht um die Sprache oder die Gegenstände. Es geht nur darum, diesen Fehler nicht selbst suchen zu müssen
Fachleute verwenden ihre eigenen Datentypen in ihrem Code. Dabei spielt es keine Rolle, in welcher Sprache sie verfasst sind.
Aber wenn eine Funktion eine ganze Zahl in dieser Reihenfolge erwartet: Akzeptieren (Breite, Höhe).
Stattdessen verwechseln wir es versehentlich und schreiben
Accept (height, width) - dann sagt der Kopierer selbst, dass wir hier eine Verwechslung haben. Ob es für Sie funktioniert - es geht auch nicht um die Sprache oder die Gegenstände. Es geht nur darum, dass Sie nicht selbst nach diesem Fehler suchen müssen.
Peter, du kannst mich behandeln, wie du willst, das ist dein Recht, aber nimm den Rat eines etwas erfahreneren Kameraden an.
.......
Vergessen Sie auch nicht, in jeder Datei eine Eigenschaft hinzuzufügen:
Diese Eigenschaft ermöglicht eine strengere Kontrolle des Codes.
es ist für 5 - dort ist es immer dasselbe!
obwohl ich im Allgemeinen zustimme: eine Menge von Warnungen bei der Kompilierung erhöht nicht das Vertrauen in den Code.
Es ist für fünf Personen gemacht - es ist immer streng!
obwohl ich im Allgemeinen zustimme: viele Warnungen zur Kompilierzeit erhöhen nicht das Vertrauen in den Code.