Fehler, Irrtümer, Fragen - Seite 2420

 

Warum sollte mql5 die Semantik verschieben? Es gibt keinen Grund für eine solche Leistungsoptimierung, zumal es sich um eine virtuelle Maschine handelt. Wozu brauchen Sie es sonst?)

Für sich genommen unterscheidet sich mql5 sehr von C++, ebenso vonC++98 und noch mehr von C++11/14/17, aber seine Fähigkeiten decken nun vollständig die Dinge ab, die Sie zur Erstellung eines EA benötigen.

 
Andrey Pogoreltsev:

aber seine Möglichkeiten decken jetzt vollständig die Dinge ab, die Sie zur Erstellung eines EA benötigen.

Diese Notwendigkeiten wurden bereits vor 6 Jahren im alten MQL4 abgedeckt, falls Sie eine Vorstellung davon haben, auf welchem Niveau die Sprache damals war. Wir haben EAs in dieser Sprache geschrieben, und einige programmieren immer noch in diesem archaischen Stil. Alles ist also relativ.

Zu welchem anderen Zweck sollte sie eingeführt werden?)

Dies wurde bereits auf den letzten Seiten dieses Themas erörtert.
 

Hier wird ein Fehler angezeigt:

void OnStart()
  {
   struct sA
     {
      int               ii[51];
     };
   struct sB
     {
      string            name;
      sA                distrib;
     };
   sB f;
  }
'distrib' - struct undefined    Test2.mq5       21      25

So geht das nicht:

void OnStart()
  {
   struct sA
     {
      int               ii[51];
     };
   struct sB
     {
      //string            name;
      sA                distrib;
     };
   sB f;
  }

Auch das funktioniert nicht:

struct sA
  {
   int               ii[51];
  };
struct sB
  {
   string            name;
   sA                distrib;
  };

void OnStart()
  {
   sB f;
  }

Im Anhang finden Sie ein Skript, mit dem Sie den Fehler reproduzieren können, ein leeres Skript mit ein paar Codezeilen wie oben.

Dateien:
Test2.mq5  1 kb
 

Nun, das macht überhaupt keinen Sinn:

class A
  {
   class B
     {
      class C
        {
         class D
           {
            class E
              {
               bool              YES;
              };
           };
        };
     };
  };
void OnStart()
  {
   E g;
  }

Die Klasse E verdient es nicht, so beliebt zu sein.

Er lässt sich ohne Fehler kompilieren.

 
Ist es ein Compilerfehler?
class A
{
private:
  int i;
};

class B : public A
{
public:  
  void f( int i ) {} // declaration of 'i' hides member declaration at line 4
};
 
fxsaber:
Ist es ein Compilerfehler?
Könnte es das lästige Geschwätz eines Formatierers sein, das von der ernsten Sache ablenkt?
 
fxsaber:
Ist es ein Compilerfehler?
in den Pluspunkten das Gleiche
 
Vict:
Vielleicht ein lästiger Mechaniker, der über Blödsinn redet und Sie von den ernsten Dingen ablenkt?

wenn du inmitten seiner Begeisterung bist, wirst du es mir dann sagen?

 
fxsaber:
Ist es ein Compilerfehler?

Das ist doch irgendwie logisch.

Wie können die Eingabeparameter in einer öffentlichen Funktion privat sein? Interessenkonflikt.

Wenn dieser private Parameter innerhalb dieser Funktion verwendet werden soll, muss er nicht als Eingabe deklariert werden, da er bereits existiert.

Wenn es sich um eine andere Variable handeln soll, gibt es natürlich einen Namenskonflikt innerhalb der Funktion mit der bestehenden privaten Variable, so dass sie unter einem anderen Namen aufgerufen werden muss.


ZS Es stellt sich heraus, dass es keine Rolle spielt, ob es öffentlich oder privat ist. Es ist ein trivialer Namenskonflikt. Innerhalb der Funktion f ist unklar, was i ist - Eingabeparameter oder globale Variable der übergeordneten Klasse.

 
Nikolai Semko:

die Frage impliziert, dass wir aufgrund der Privatsphäre nicht auf das Mitglied zugreifen können, aber der Namenskonflikt wird vom Compiler trotzdem angezeigt.

wie ich schrieb, verhalten sich die Pluszeichen genau gleich, d.h. es gibt keinen Fehler im Compiler und alles ist gut.