Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1097

 
Seric29:

Als Parameter wird ein Zeiger auf eine Funktion übergeben. Wie ich sehe, hat noch niemand herausgefunden, wie man das mit Klassen machen kann. Es ist mir auch immer noch nicht klar, warum ein Zeiger auf eine Klasse zurückgegeben werden sollte.

Hier sind interessante Beispiele, die aber für meine Frage nicht relevant sind.

Ich habe auch etwas Ähnliches im Leitfaden gesehen, aber ich habe diese Seiten bereits geschlossen, weil mir die Hände weh tun und ich zu arbeiten habe.

Warum sollte ich mit einer so einfachen Aufgabe auf so seltsame Art und Weise spielen? Sie können die benötigten Daten einfach über ein Klassenobjekt abrufen

Ich bin mit Referenzen, Zeigern und Funktionszeigern vertraut, aber ich verwende sie in der Praxis selten. Und im Allgemeinen denke ich, dass sie nur für die Speichereinsparung benötigt werden - und Expert Advisors mit Indikatoren sind keine Spiele, so können wir mit gemeinsamen Variablen und Klassenobjekte imglobalen Bereich verwalten

 
Alexandr Sokolov:

Warum sollte man sich bei einer so einfachen Aufgabe so viel Mühe geben? Sie können die erforderlichen Daten einfach über ein Klassenobjekt abrufen

Ich bin mit Referenzen, Zeigern und Zeigern auf Funktionen vertraut, verwende sie aber nur selten. Meiner Meinung nach sind sie nur für die Speichereinsparung notwendig, die Expert Advisors mit Indikatoren sind keine Spiele, daher können wir gewöhnliche Variablen und Klassenobjekte im globalen Bereich verwenden.

Ich möchte mich nicht mit einer einfachen Aufgabe aufhalten, und natürlich ändere ich meine Programme, in denen vorher eine Funktion aufgerufen wurde, ich schreibe einen arithmetischen Ausdruck, um Berechnungen zu vereinfachen, oder wechsle zu einer vereinfachten überladenen Funktion, also möchte ich das Programm in Klassen übersetzen. Aber wie Sie oben geschrieben und selten verwenden sie, und jetzt die Frage ist, Klassen sind da, aber die Erstellung von Zeigern auf Funktionen dieser Klasse ist unmöglich, warum diese Art der Programmierung benötigt wird, wenn Sie eine tun, können Sie nicht die andere tun, es ist nicht Programmierung, aber der Teufel weiß, was.

 
Seric29:

Ich möchte mich nicht mit einer einfachen Aufgabe aufhalten, und natürlich ändere ich meine Programme, in denen zuvor eine Funktion aufgerufen wurde, ich schreibe einen arithmetischen Ausdruck, um Berechnungen zu vereinfachen, oder ich wechsle zu einer vereinfachten überladenen Funktion, also möchte ich das Programm in Klassen übersetzen. Aber wie Sie oben geschrieben und selten verwenden sie, und jetzt ist die Frage, Klassen sind da, aber das Erstellen von Zeigern auf Funktionen dieser Klasse ist unmöglich, warum diese Art der Programmierung benötigt wird, wenn Sie eine tun, können Sie nicht die andere tun, ist es nicht die Programmierung, aber der Teufel weiß, was.

Eine Klasse ist eine Vorlage für ein Objekt, und um die in dieser Vorlage enthaltenen Funktionen nutzen zu können, müssen Sie zunächst ein Objekt erstellen.

Im Wesentlichen fungiert der Klassenname als Datentyp, wie int, double, string usw., jedoch mit erweiterten Funktionen. Sie können eine Variable nicht deklarieren, ohne ihren Typ anzugeben.

Darüber hinaus können Sie die Funktion einfach von der Klasse abkoppeln, so dass sie in der Klasse und unabhängig von der Klasse verwendet werden kann, ohne ein Objekt zu erstellen

 

Kann es einen anderen Grund geben, warum der Indikator nicht funktioniert, außer dass seine Datei aus dem entsprechenden Ordner gelöscht wurde? (der Indikator ist kompiliert und funktioniert in einem Terminal, aber nicht in einem anderen)


 
Alexandr Sokolov:

Eine Klasse ist eine Vorlage für ein Objekt, und um die in dieser Vorlage enthaltenen Funktionen nutzen zu können, müssen Sie zunächst ein Objekt erstellen.

Der Klassenname fungiert nämlich als Datentyp, wie int, double, string usw., jedoch mit erweiterter Funktionalität. Sie können eine Variable nicht deklarieren, ohne ihren Typ anzugeben.

Darüber hinaus können Sie die Funktion einfach von der Klasse abkoppeln, so dass sie in der Klasse und unabhängig von der Klasse verwendet werden kann, ohne ein Objekt zu erstellen

Es sei denn. Nun, es ist nur so, dass Klassen sind ein kompliziertes Thema, und es gibt Tonnen von Beispielen in der Referenz-Buch auf die Weitergabe, auf die Erstellung von Links und Zeiger, ich denke, es ist möglich (zumindest in C + + es ist möglich, aber mql4 hat nichts mit C + + zu tun), es ist notwendig, um zu verstehen, wie es funktioniert. Help hat diese Beispiele gezeigt, sie sind sehr kompliziert und überladen, anstatt eine Klasse zu nehmen und ein einfaches Beispiel zu zeigen, haben sie es mit zusätzlichen Berechnungen und Informationen überladen und ich kann nicht verstehen, was sie meinen, ich habe alle diese Links wegen Erschöpfung und Müdigkeit geschlossen. Ok, ich werde also einfach Funktionen aus der Klasse nehmen.

 
Alexandr Sokolov:

Kann es einen anderen Grund geben, warum der Indikator nicht funktioniert, außer dass seine Datei aus dem entsprechenden Ordner gelöscht wurde? (der Indikator ist kompiliert und funktioniert in einem Terminal, aber nicht in einem anderen)


Vom Markt?

 
Alexandr Sokolov:

Kann es einen anderen Grund geben, warum der Indikator nicht funktioniert, außer dass seine Datei aus dem entsprechenden Ordner gelöscht wurde? (der Indikator ist kompiliert und funktioniert in einem Terminal, aber nicht in einem anderen)


Meldungen in Terminal- und Expert Advisor-Protokollen sehen

Ihr Bildschirmfoto zeigt nur, dass dieser Indikator keinen Quellcode hat

 
Alexandr Sokolov:

Kann es einen anderen Grund geben, warum der Indikator nicht funktioniert, außer dass seine Datei aus dem entsprechenden Ordner gelöscht wurde? (der Indikator ist kompiliert und funktioniert in einem Terminal, aber nicht in einem anderen)


Vielleicht braucht es zusätzliche Bibliotheken
 
Сергей Таболин:

Vom Markt?

Nein

Igor Makanu:

Meldungen im Terminal und in den Expert Advisor-Protokollen sehen

Ihr Bildschirmfoto zeigt nur, dass dieser Indikator keine Quelle hat

Dankeschön

MakarFX:
Vielleicht braucht es zusätzliche Bibliotheken

Genau, nein, ich habe es geschrieben - ich würde es wissen

 

Bitte sagen Sie mir, warum der Compiler im folgenden MQL4-Testskriptcode eine Warnung erzeugt:

#property strict

struct st_sig {
   string   sym;           // Symbol
   int      age;           // Bars ago
}; st_sig Signals[];

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart() {

   BubbleSort(Signals);
   
}

//+----------------------------------------------------------------------------+
void BubbleSort(st_sig &sig[]) {
  double t;
  int    i, j, n=ArraySize(sig);

  for (i=n-1; i>0; i--) {
    for (j=0; j<i; j++) {
      if (sig[j].age>sig[j+1].age) {
        t=sig[j].age;
        sig[j].age=sig[j+1].age;
        sig[j+1].age=t;       // Line#27 with warning
      }
    }
  }
}

Eine Warnung in Zeile 27 über eine Fehlanpassung des Datentyps. Beide Variablen haben denselben int-Typ. Nachfolgend sehen Sie einen Screenshot der Skriptkompilierung.

Wenn ich die Zeile 27 durch

sig[j+1].age=(int)t;

wird die Warnung nicht angezeigt.

Was ist der Trick?