Fehler, Irrtümer, Fragen - Seite 1182
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
Die Optimierung funktioniert nicht.
2014.08.05 19:34:42 Tester keine optimierten Parameter ausgewählt, bitte überprüfen Sie die zu optimierenden Eingänge und stellen Sie sorgfältig Start-, Schritt- und Stoppwerte ein
Die Übersetzung hat nichts ergeben.
Was meinen Sie mit "nichts"? Die Übersetzung hätte mir etwas sagen sollen, z. B. dass ich mindestens einen Parameter für die Optimierung auswählen und sicherstellen soll, dass der Beginn, das Ende und der Schritt des Tests korrekt sind.
Ich stand vor folgendem Problem: Ich muss zwei Objekte der gleichen Klasse miteinander vergleichen und beschloss, der Einfachheit halber den Operator == zu überladen. Es stellte sich heraus, dass, wenn die Objekte dynamisch sind, mein Operator nicht ausgeführt wird und statt der Objekte selbst ihre Zeiger verglichen werden. Nun, im Prinzip macht es Sinn, die Operation des Springens auf das Objekt durch seinen Zeiger ist erforderlich: *a == *b. Aber in MQL war diese Möglichkeit vergessen worden. Wir müssen hinzufügen.
Obwohl ich gerade gedacht habe, dass die Tatsache, dass wir Zeiger statt Objekte vergleichen, in Anbetracht der Besonderheiten der Sprache grundsätzlich falsch ist. Schließlich ist MQL eine verwaltete Sprache, und der Begriff "Objekt" wird hier unabhängig davon verwendet, wie das Objekt gespeichert wird und wie darauf zugegriffen wird. Auf Mitglieder und Methoden wird in jedem Fall mit einem Punkt zugegriffen. Dementsprechend sollte der Vergleichsoperator sowohl für statisch ausgewählte Objekte als auch für dynamische Objekte auf die gleiche Weise funktionieren. Und wenn Sie Zeiger vergleichen müssen, sollten Sie diesmit GetPointer() tun.
Obwohl ich gerade dachte, die Tatsache, dass es einen Vergleich von Zeigern statt der Objekte selbst gibt, ist angesichts der Besonderheiten der Sprache grundsätzlich falsch.
Beim Testen des Expert Advisors wird ein Fehler erzeugt
Ungültige Gewinnmitnahme für die Funktion OrderSend
OrderSend-Fehler 4107
Wie kann ich das Problem beheben, ohne in den Code zu gehen?
Es besteht keine Notwendigkeit, in MQL Vergleichsregeln zu erfinden, die im Widerspruch zu C++ stehen, solange andere Mittel verwendet werden können. Wenn Sie Zeiger haben und Objekte vergleichen müssen, verwenden Sie eine Vergleichsfunktion Es ist eine Sache, einen Eintrag der Art (*a == *b) zuzulassen, und eine ganz andere, dem Eintrag (a == b) eine andere Bedeutung zu geben
Nun, ich erkläre, dass die MQL-Regeln im Widerspruch zu C++ stehen, denn hier wird der Verweis auf ein Objekt durch einen Zeiger mit einem Punkt gemacht, während er mit -> gemacht werden sollte, wenn wir den C++-Regeln folgen.
D.h. "Zeiger" und "Objekt" sind in C++ zwei völlig unterschiedliche Begriffe, deshalb ist auch die Syntax anders. Alles ist streng. Aber hier ist alles durcheinander. Es sieht so aus, als ob wir Eigenschaften und Methoden eines Zeigers ansprechen. Ich sage nicht, dass es schlecht ist, es ist bequemer für OOP, es wird z.B. in C# gemacht. Aber dann muss alles andere auf die gleiche Art und Weise implementiert werden. Es muss ein einziges Konzept geben. Sonst entstehen Widersprüche und Verwirrung: in einigen Fällen verwenden wir einen Zeiger auf die gleiche Art und Weise wie das Objekt selbst, und in anderen Fällen erwacht der Zeiger plötzlich zum Leben.
Was die praktische Seite betrifft, so bin ich bereits mit einem Problem konfrontiert worden: Mein Code verwendete statische Objekte. Dann beschloss ich, einige von ihnen durch dynamische zu ersetzen. Infolgedessen begannen Vergleichs- und Zuweisungsoperationen ganz anders zu funktionieren. Und dieses Problem war schwer zu erkennen, weil das Programm weiterhin kompiliert und normal funktioniert, aber nicht so, wie es sollte.
Ich habe eine Klasse in meinem Code, die ein Objekt enthält:
Die Klasse CObj wird vor ihr deklariert.
Beim Versuch zu kompilieren erhalte ich folgende Fehlermeldung: 'Object' - cannot be unset
Was bedeutet dieser Fehler und was ist seine Ursache? Ich kann mich nicht erinnern, diesen Fehler schon einmal gesehen zu haben. Die Klasse CObj hat einen Konstruktor und einen Destruktor.
Ich habe versucht, Object einfach als Variable zu deklarieren - alles ist in Ordnung. Aber das geht nicht, wenn es Teil einer Klasse ist.
Kann jemand erklären, was dieser Fehler ("- cannot be unset") ist und wann er auftritt?