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

 
Roman Sharanov:

unten in der Klassendatei

Gibt diese Methode einen Fehler zurück? Wenn ja, definieren Sie sie im privaten Bereich. Sie können es in seiner Gesamtheit tun:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class newC
  {
private:
   int      m_var;
   double   varSqrt(void)           const { return ::MathSqrt(this.m_var); }
public:
                     newC(int var);
                    ~newC();
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
newC::newC(int var)
  {
      this.m_var = var;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
newC::~newC()
  {
  }
//+------------------------------------------------------------------+

Oder Sie können es herausnehmen:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class newC
  {
private:
   int      m_var;
   double   varSqrt(void) const;
public:
                     newC(int var);
                    ~newC();
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
newC::newC(int var)
  {
      this.m_var = var;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
newC::~newC()
  {
  }
//+------------------------------------------------------------------+
double newC::varSqrt(void) const
  {
   return ::MathSqrt(this.m_var);
  }
//+------------------------------------------------------------------+
 
neverness:

Nun, wenn es Unsinn ist, dann ist er erfahrungsgeprüft.

Nicht nur "theoretischer Blödsinn" !!!

Ganz genau.

Ich verwende alle Arten von Arrays in Indikatoren sicher. Und als Puffer, und dynamisch, und statisch.

Aber alles funktioniert nicht für Sie und die Erfahrung sagt Ihnen, sorry, irgendeinen Unsinn.

 
Artyom Trishkin:

Gibt diese Methode einen Fehler zurück? Wenn ja, definieren Sie sie im privaten Bereich. Sie können es als Ganzes definieren:

Und Sie können es herausnehmen:

Oder Sie können einfach auf das private Mitglied der Klasse als this.m_var innerhalb der Klasse verweisen.
 
neverness:

Nun, wenn es Unsinn ist, dann ist er erfahrungsgeprüft.

Nicht nur "theoretischer Blödsinn" !!!

Niemand hindert Sie daran, ein dynamisches Array in Ihren Berechnungen zu verwenden.

Aber!!! Der Prozessor ist während der Berechnungen beschäftigt und es wird nicht in das dynamische Array geschrieben.

Daher werden alle Daten, die während der Berechnungen in ein dynamisches Array gelangen, automatisch ignoriert. (Manchmal werden sie auch geschützt und in einen Puffer geschrieben).

Ich hoffe, das ist klar?

Aus diesem Grund werden alle Daten in dynamischen Arrays auf statische Arrays verteilt, damit keine Daten verloren gehen, während der Prozessor arbeitet.

Und deshalb sollten alle Berechnungen in statischen Arrays durchgeführt werden!!!

Dies ist ein heftiger Unsinn, der es wert ist, in die Annalen des Forums einzugehen.

 
Artyom Trishkin:

Das ist sie.

Ich verwende problemlos alle Arten von Arrays in Indikatoren. Und als Puffer, und dynamisch, und statisch.

Aber das funktioniert bei Ihnen nicht, und die Erfahrung sagt Ihnen, sorry, das ist Unsinn.

Gut.

Führen wir ein Experiment durch.

Nehmen wir ein dynamisches Array, das mit Tickdaten verknüpft ist, und verwenden wir den Prozessor für dieses Array für ein paar Stunden.

Und sehen Sie, was wir in dieser Zeit in dieses Feld schreiben!

Gefällt Ihnen diese Formulierung der Frage? (Natürlich ohne Puffer).

 
neverness:

Also gut.

Lassen Sie uns ein Experiment machen.

Nehmen wir ein dynamisches Array, das mit Tickdaten verknüpft ist, und beschäftigen den Prozessor einige Stunden lang mit diesem Array.

Und sehen Sie, was wir in dieser Zeit in dieses Feld schreiben!

Gefällt Ihnen diese Formulierung der Frage? (Natürlich ohne den Puffer).

Tun Sie es. Dann geben Sie den Code hier ein.

 
Artyom Trishkin:

Gibt diese Methode einen Fehler zurück? Wenn ja, definieren Sie sie im privaten Bereich. Sie können es als Ganzes definieren:

Und Sie können es herausnehmen:

Ja, so sollte es sein, danke.

 
Artyom Trishkin:

Tun Sie es. Dann geben Sie den Code hier ein.

Ja, natürlich.

Das werden wir später sehen.

 

Eine andere Frage.

Ich habe eine Struktur in einer Klasse.

Wie kann ich sie per Anfrage an externen Code zurückgeben, der mit dieser Klasse arbeitet?

 
Roman Sharanov:

Eine andere Frage.

Ich habe eine Struktur in einer Klasse.

Wie kann ich sie per Anfrage an externen Code zurückgeben, der mit dieser Klasse arbeitet?

nur durch die Beschreibung der Struktur selbst auf der Ebene der Sichtbarkeit der globalen Variablen

dann deklarieren Sie die Strukturvariable in der Klasse

und in Ihrem externen Code können Sie die gleiche Variable deklarieren, aber beachten Sie, dass, wenn Sie eine solche Variable innerhalb von OnTick() deklarieren, jeder Aufruf von OnTick() einen Strukturkonstruktor startet, auch wenn Sie es nicht erstellt haben - in MQL gibt es keinen Unterschied zwischen Klassen und Strukturen, das einzige, was ich mich erinnere, der Konstruktor mit dem Parameter der Strukturen, die durch neue erstellt werden, wird nicht vom Compiler übergeben

Also... In der klassischen OOP kommt man in der Regel nicht über die Klasse hinaus, indem man die internen Elemente (Klassenfelder) übergibt, alles wird in der Regel über Abfragen an die Klasse Get() realisiert ... Setzen()... Nun, das ist Geschmackssache.

SZ: .... Vererbung verwenden, Erben haben gemeinsame Klassen, den Quellcode der Klassen aus der MT-Lieferung ansehen (Include-Ordner)