Fragen zu OOP in MQL5 - Seite 81

 

Eine weitere Frage zum Casting

gibt es diesen Code:

struct SHash
   {
      ulong hash[2];
      SHash()                                {  }
      SHash(const double)                    { ArrayInitialize(hash, 0xAAAAAAAAAAAAAAAA);                }
      SHash(const SHash &val)                { ArrayCopy(hash, val.hash);                                }
      bool operator==(const SHash &val)const { return(hash[0] == val.hash[0] && hash[1] == val.hash[1]); }
   };
//+------------------------------------------------------------------+
class BASE
{
private:
   const SHash _hash;
protected:
   BASE(SHash &hash): _hash(hash)             {  }
};

class A:BASE
{
public:
   A(SHash &hash):BASE(hash)                 {  }
};


class B:BASE
{
public:
   B():BASE((SHash)0.0)                      {  }
};

//+------------------------------------------------------------------+
void OnStart()
{
   SHash h(0.0);
   A a(h);
}
//+------------------------------------------------------------------+

und ich möchte die Klasse B mit einem Konstruktor ohne Parameter initialisieren, aber ich kann die SHash-Struktur nicht in den Konstruktor SHash(const double) übertragen

d.h. ich benötige einen Guss (SHash) double

In meinem Beispiel gibt es einen Compilerfehler: '(SHash)' - ungültige Cast-Operation


wenn Sie es so schreiben:

class B:BASE
{
public:
   B():BASE(0.0)                      {  }
};
error: '0.0' - Parameter als Referenz übergeben, Variable erwartet

 
Igor Makanu:

Eine weitere Frage zum Casting

gibt es diesen Code:

und ich möchte die Klasse B mit einem Konstruktor ohne Parameter initialisieren, aber ich kann die SHash-Struktur nicht in den Konstruktor SHash(const double) übertragen

d.h. ich benötige einen Guss (SHash) double

In meinem Beispiel gibt es einen Compilerfehler: '(SHash)' - ungültige Cast-Operation


wenn Sie es so schreiben:

error: '0.0' - Parameter als Referenz übergeben, Variable erwartet

class B:BASE
{
public:
   B():BASE(SHash())                      {  }
};
 
Vladimir Simakov:

So funktioniert es

aber brauchen 0xAAAAAAAAAAAAAA Initialisierung für SHash-Struktur - es ist eine Art von NULL - nicht bekommen MD5 Hash von Test-String (ich überprüft)

Der SHash()-Konstruktor scheint jetzt nicht mehr benötigt zu werden, aber vor ein paar Tagen war er noch notwendig ))) Also, zuerst war es nicht da, dann habe ich einen Kompilierungsfehler irgendwo mit diesem leeren Konstruktor behoben, oder beim Vergleich von Strukturen oder während der Initialisierung... Im Allgemeinen besteht eine hohe Wahrscheinlichkeit, dass.... benötigt wird. obwohl es eine gute Regel zu sein scheint, alle Variablen zu initialisieren....

Im Allgemeinen wünschte ich, ich hätte eine Variante oder eine eindeutige - keine ))))

 
Igor Makanu:

So funktioniert es

aber brauchen 0xAAAAAAAAAAAAAA Initialisierung für SHash-Struktur - es ist eine Art von NULL - nicht bekommen MD5 Hash von Test-String (ich überprüft)

Der SHash()-Konstruktor scheint jetzt nicht mehr benötigt zu werden, aber vor ein paar Tagen war er noch notwendig ))) Also, zuerst war es nicht da, dann habe ich einen Kompilierungsfehler irgendwo mit diesem leeren Konstruktor behoben, oder beim Vergleich von Strukturen oder während der Initialisierung... Im Allgemeinen besteht eine hohe Wahrscheinlichkeit, dass.... benötigt wird. obwohl es eine gute Regel zu sein scheint, alle Variablen zu initialisieren....

Im Allgemeinen wünschte ich, ich hätte eine Variante oder eindeutig - nein )))

SHash(0.0)

aber erraten Sie es selbst?)))

 
Vladimir Simakov:

aber erraten Sie es selbst?))

SHash((double)x)
 
Vladimir Simakov:

und es selbst erraten?)))

class B:BASE
{
public:
   B():BASE(SHash(0.0))                      {  }
};

Oh, Mann, es funktioniert!

Ich glaube, ich habe es auch auf diese Weise versucht, ich weiß nicht, warum es nicht funktioniert hat.

Danke!

schlimm verpfuscht ((!

 
Alexandr Andreev:

Ja, und woher bekommen Sie das x im Klassenkonstruktor?))

 
Vladimir Simakov:

Ja, und woher bekommen Sie x im Klassenkonstruktor?)

es geht nicht um x), sondern darum, dass auf der Empfängerseite ein Float sein kann, nur 0,0 ist auch nicht zuverlässig

 
Alexandr Andreev:

der Punkt ist nicht das x), sondern dass es neben dem Duble auch einen Float auf dem Empfänger geben kann, und die Angabe von nur 0,0 ist ebenfalls unzuverlässig

obwohl das alles nur ein Detail ist... nicht besonders wichtig

 
Alexandr Andreev:

Es geht nicht um x), sondern darum, dass der Empfang durch den Duble schwanken kann, so dass die Angabe von nur 0,0 ebenfalls unzuverlässig ist.

Es spielt keine Rolle, was dort initialisiert wird, sogar int - eine beliebige Zahl, um diesen Konstruktor aufzurufen

und ich habe 0,0 gewählt, um Druckfehler zu vermeiden - eine beliebige Ziffer, z. B. 0,0, ist schwieriger zu schreiben und falsch zu drucken als 123