Fehler, Irrtümer, Fragen - Seite 49

 

Warum erkennt der Compiler nicht den Unterschied zwischen int und colour.

   void              CreateLabel(int x,int y,color COLOR);   
   void              CreateLabel(int x,int y,int n);

Wenn ich eine Funktion neu definiere, schimpft er mit mir (er sagt, ich solle aufpassen, dass ich die Pedale verwechsle).

'CreateLabel' - ambiguous call to overloaded function with the same parameters
Wenn es nur Standardparameter gäbe, aber es gibt keine Unklarheiten, definieren Sie einfach den Typ des übergebenen Parameters und fahren Sie fort.
 
Urain:

Warum erkennt der Compiler nicht den Unterschied zwischen int und colour.

Ich überschreibe eine Funktion, er flucht (sagt, ich solle die Pedale vorsichtig verwechseln).

Wenn es nur Standardparameter gäbe, aber es gibt keine Unklarheiten, definieren Sie einfach den Typ des übergebenen Parameters und los geht's.
In diesem Fall beschwert sich der Compiler, dass Sie zwei Funktionen mit demselben Namen erstellt haben, und die übergebenen Parameter haben damit nichts zu tun.
 
sergey1294:
In diesem Fall beschwert sich der Compiler, dass Sie zwei Funktionen mit demselben Namen erstellt haben, und die übergebenen Parameter haben nichts damit zu tun.

Lesen Sie in diesem Fall, was das Wort "Überlastung" bedeutet.

SZ sowie das"Überladen von Funktionen".

Документация по MQL5: Основы языка / Функции / Перегрузка функций
Документация по MQL5: Основы языка / Функции / Перегрузка функций
  • www.mql5.com
Основы языка / Функции / Перегрузка функций - Документация по MQL5
 
Urain:

Eine Frage an die schreibende Zunft, nicht ein Fehler oder ein Bug, sondern eine Frage, wer was vorschlagen kann...

Ich möchte den Namen des Zeigers innerhalb der Klasse erhalten, aber es funktioniert nicht.

Im Allgemeinen ist das Wesen der Sache ist, dass ich String-Namedes grafischen Objekts wurde automatisch zugewiesen wollen.

Ich möchte automatisch einen Stringnamen dafür erhalten.

Bei der Installation von grafischen Objekten aus Klassenmethoden sollte der Name automatisch in Abhängigkeit vom Cursor vergeben werden.

Ich weiß noch nicht, wie man das macht, aber ich denke, wir können es von Grund auf neu machen.


Theoretisch gibt es zwei Hauptmöglichkeiten, ein Objekt automatisch zu benennen (mit verschiedenen Variationen bei der Implementierung):

1. Die Namensgenerierung basiert auf einer nummerierten Liste

Eine separate Klasse übernimmt die Namensgebung für das Objekt und verwaltet die "Zähler" (die entweder für alle Objekte oder für eine bestimmte Gruppe von Objekten gelten können).

In diesem Fall wird die Bezeichnung (vorzugsweise) auf der Grundlage folgender Elemente gebildet: Objekttyp, Name des Symbols (Währungspaar), textuelle Notation der TF und Seriennummer des Objekts (aus dem Zähler).

In diesem Fall können Sie, je nach Implementierung, das Vorhandensein des Objekts im Diagramm verfolgen oder nicht.

2. Der Name wird auf der Grundlage von Datum und Uhrzeit der Objekterstellung gebildet.

Der Name kann bei diesem Ansatz gebildet werden auf der Basis von: Objekttyp, Symbolname, Textnotation TF und Schlüssel (gebildet auf der Basis von Datum und Uhrzeit).

PS

Bei der ersten Variante wäre es (meiner Meinung nach) sinnvoller, eine Klasse und den gesamten Zyklus der Objektverwaltung (Erstellung, Änderung und Löschung) zu implementieren...

 
Urain:

In diesem Fall sollten Sie lesen, was "Überlastung" bedeutet.

ZS Nun ja, sowie"Funktionsüberladung".

Ich wusste nicht, dass das möglich ist.
 
sergey1294:
Ich wusste nicht, dass das möglich ist.

Polymorphismus und Funktionsüberladung sind grundlegende OOP-Prinzipien, die in jeder anständigen Sprache vorhanden sein sollten.

Polymorphismus

Polymorphismus ist ein Phänomen, bei dem eine Funktion (Methode) mit demselben Namen einem unterschiedlichen Programmcode (polymorpher Code) entspricht, je nachdem, welches Klassenobjekt beim Aufruf der Methode verwendet wird. Die Polymorphie wird dadurch gewährleistet, dass die Implementierung der Methode der Vorgängerklasse in der Nachfolgeklasse geändert wird, wobei die Signatur der Methode erhalten bleiben muss. Dies stellt sicher, dass die Schnittstelle der übergeordneten Klasse unverändert erhalten bleibt und ermöglicht die Verknüpfung eines Methodennamens in Code mit unterschiedlichen Klassen - die Methode mit dem angegebenen Namen wird aus dem Objekt der Klasse übernommen, von der aus der Aufruf erfolgt. Dieser Mechanismus wird als dynamische (oder späte) Bindung bezeichnet - im Gegensatz zur statischen (frühen) Bindung, die zur Kompilierzeit erfolgt.

Überladen von Funktionen

Überladen von Prozeduren und Funktionen - eine Möglichkeit, die gleichnamigen Unterprogramme zu verwenden: Prozeduren oder Funktionen in Programmiersprachen.


Beispiel aus der Standardbibliothek der Handelsklassen, Klasse CAccountInfo:

double MarginCheck(const string symbol,ENUM_POSITION_TYPE trade_operation,double volume) const;
double MarginCheck(const string symbol,ENUM_ORDER_TYPE trade_operation,double volume) const;
 
ddd06:

Ich habe lange mit dem angesehenen Unternehmen MetaQuotes gesprochen und ihnen bewiesen, dass es eine Störung gab, und sie haben mir gesagt, dass es keine Störung gab.

Ich blieb jedoch hartnäckig, und man riet mir, die Gemeinschaft zu fragen.

Wir haben also einen Indikator und einen Expert Advisor, der die Werte des Indikators übernimmt.

Starten Sie den Tester für EURUSD vom 01.07.2010 bis 02.07.2010 auf М1

Wir sehen uns das Protokoll an und stellen fest, dass sich die Werte des einen Puffers ändern, die des anderen aber nicht.

Das dauert eine Stunde, und dann ist der zweite Puffer aktiv, aber wenn man sich die Werte des Indikators ansieht, stimmen sie nicht überein.

Ich habe sogar versucht, das Konto zu ändern und den Verlauf neu zu laden, aber das hat nicht geholfen.

Hier ist ein Link zu meinem Terminal in rar 90mbhttp://dl.dropbox.com/u/6290215/MetaTrader%205%201111.rar, dort ist alles eingerichtet

Und der Indikator mit dem Berater im Anhang

Sie haben einen Code mit einem Fehler eingereicht. Natürlich ist es Ihr Code, der die falschen Informationen ausgibt. Sie haben unsere Hinweise zur Behebung des Fehlers ignoriert und jedes Mal einen neuen Code angeboten, der jedes Mal einen Fehler enthält.
 
Urain:

Warum erkennt der Compiler nicht den Unterschied zwischen int und colour.

Ich überschreibe eine Funktion, er flucht (sagt, ich solle die Pedale vorsichtig verwechseln).

OK, es gäbe Standardparameter, aber es gibt keine Unklarheiten, definieren Sie einfach den Typ des übergebenen Parameters und fahren Sie fort.
Es gibt wirklich ein Problem - wir werden uns darum kümmern.
 
Urain, ich danke Ihnen für Ihre Nachricht. Der Fehler wurde korrigiert.
 
stringo:
Sie haben den Code mit einem Fehler versehen. Natürlich ist es Ihr Code, der falsche Informationen liefert. Gleichzeitig haben Sie unsere Kommentare zur Fehlerbehebung ignoriert und jedes Mal einen neuen Code angeboten, der jedes Mal einen Fehler enthält.

Wenn Sie mir jedoch gesagt hätten, dass es keine Synchronisierung geben sollte und wir sie in den Code einbauen sollten...

Stattdessen haben Sie hartnäckig behauptet, dass alles zusammenpasst.

aber TimeToString(time[0],TIME_DATE|TIME_MINUTES)," buf1-",buf1[1]," buf2-",buf2[1]) anstelle von TimeToString(time[1],TIME_DATE|TIME_MINUTES)," buf1-",buf1[1]," buf2-",buf2[1]);

Das ist sicherlich ein Fehler, aber er hat keinen Einfluss auf den Punkt.

Ich werde mir noch einmal einen Indikator ausdenken, um zu überprüfen, wie falsch ich lag.

Das heißt, Sie haben gesagt, dass alles übereinstimmt und Sie den Code des Expert Advisors korrigiert haben. Aber in Wirklichkeit stimmt nichts überein und wir sollten den Code des Indikators korrigieren (um die Synchronisation darin zu integrieren).