Fehler, Irrtümer, Fragen - Seite 1357
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Übrigens, ich verstehe diesen Code nicht, an welcher Stelle wird operator== aufgerufen? Es ist nur ein Vergleich von zwei Longs, das ist alles
...
IsEqualPointer kann entweder ein Muster oder eine allgemeine Funktion ähnlich wie ::GetPointer sein
Ich verstehe Sie überhaupt nicht, könnten Sie in menschlicher Sprache erklären, was Sie zu tun versuchen? Der angegebene Code hat Fehler (operator== hat weder Argument, noch Rückgabewert), es ist schwer, etwas von all dem zu verstehen.
Um es gleich vorweg zu sagen: Das Problem des Vergleichens/Zuordnens von Zeigern hat es noch nie gegeben, dafür reicht GetPointer(a)==GetPointer(b). Die Aufgabe betrifft also nur den Vergleich/die Zuordnung von Objekten selbst, d.h. es ist garantiert, dass diese Operationen durchgeführt werden, unabhängig davon, ob diese Objekte durch Zeiger oder Referenzen repräsentiert werden
Der von Ihnen angegebene Code ist fehlerhaft (operator== hat kein Argument und keinen Rückgabewert), es ist schwer, aus all dem etwas zu verstehen.
GetPointer(a)==GetPointer(b) führt zu a.operator==( b )
Wie wäre es übrigens mit der Einführung der Operatoren * und & in MQL, um im ersten Fall einen expliziten Zugriff auf ein Objekt zu ermöglichen und im zweiten Fall einen Objektzeiger zu nehmen (anstelle des umständlichen GetPointer). Das Sternchen ist ein Muss, und es gibt in der Sprache nichts, was es ersetzen könnte.Ohne sie ist es unmöglich, Situationen wie die von A100 oben beschriebene zu kontrollieren, wenn statt der Objekte selbst irgendwelche Zeigeraktionen ausgeführt werden. Persönlich ist das ein ständiges Problem, ich muss ständig auf der Hut sein oder überall A.operator=(B), A.operator!=(B) angeben, d.h. die Kürze geht verloren, und das Überladen von Operatoren wird eigentlich sinnlos.
Ich habe dieses Problem schon einmal angesprochen, aber das Thema wurde abgewürgt. Lassen Sie uns dieses Thema endlich zu Ende bringen.
Dem stimme ich zu, ich werde das Thema auf jeden Fall ansprechen und wir werden es diskutieren.
Warum sollte das so sein?
...
Wenn Sie operator== mit operator< gleichsetzen, ist das Ergebnis ebenfalls dasselbe.
Du hast nicht einmal geprüft, was du vorschlägst! Genau wie im vorherigen Fall, als es offensichtliche Fehler im Code gab, d.h. du hast nicht einmal versucht, ihn zu kompilieren. Du hast etwas auf einer Kurbel skizziert, ein paar Gedanken von dir, wie "friss es, solange ich nett bin, kein Mitleid"... Ist das richtig? Lassen wir diesen Unsinn.
Ich selbst vergleiche ständig Zeiger und Überladungsoperatoren, und es ist nie das passiert, wovon Sie jetzt träumen. Und nachdem ich jetzt Ihren Code überprüft habe, sind keine Wunder geschehen, operator== wird nicht so ausgeführt, wie es sein sollte.
Nachdem ich nun also Ihren Code überprüft habe, sind keine Wunder geschehen, der Operator== startet nicht wie er sollte.
Der Sinn des Satzes ist ja gerade, dass er ausgelöst werden soll.
Was soll das? Es steht auf dem Kopf.
Der umgekehrte Weg ist sinnvoller: < und > sollten einen Vergleich von Zeigern bewirken.