Fehler, Irrtümer, Fragen - Seite 2680

 
Koldun Zloy:

Es ist auch hier alles richtig.

nicht richtig!

Ich habe es speziell in VS2019 überprüft:

class A
    {
        private int f1() { return 1; }
        private int f2() { return 2; }
        public int  f(int v) { const int a = f1(); const int b = f2(); return (v + a + b); }
    }

Fehler CS0133 Der "a" zugewiesene Ausdruck muss konstant sein. ConsoleApp2 ..\repos\ConsoleApp2\ConsoleApp2\Program.cs 13 Aktiv

Fehler CS0133 Der "b" zugewiesene Ausdruck muss konstant sein. ConsoleApp2 ..\repos\ConsoleApp2\ConsoleApp2\Program.cs 13 Aktiv

 
Igor Makanu:

Letztes Jahr hat es nicht so funktioniert - ich habe speziell Const-Modifikatoren getestet

und es scheint, dass@Ilyas erklärt hat, wie man ein MQL-Programm ausführt, zuerst werden alle const und static initialisiert, egal wo sie definiert sind, und dann werden die Klassenkonstruktoren aufgerufen

ok, mit dieser Initialisierung statisch / const - es kann immer noch richtig verteilt werden, aber die Tatsache, dass die const Modifikator nicht garantieren, dass der Compiler wird es überprüfen - sehr unerwartet - mein zweites Beispiel

In Ihren beiden Beispielen funktioniert alles korrekt und wird erwartet.

 
Koldun Zloy:

In Ihren beiden Beispielen funktioniert alles korrekt und wird erwartet.

erwartungsgemäß ist const Modifier 99% sicher, dass Compiler meinen Fehler beim Kompilieren finden, VS2019 tut es, MQL tut es nicht

 
Igor Makanu:

erwartete const Modifikator ist 99% sicher, dass Compiler meinen Fehler beim Kompilieren finden, VS2019 tut es, MQL tut es nicht

Was genau ist für Sie ein Fehler?

Ich erhalte keine Fehler von VS2019.

 
Igor Makanu:

Letztes Jahr hat es nicht so funktioniert - ich habe speziell Const-Modifikatoren getestet

und es scheint, dass@Ilyas erklärt hat, wie man ein MQL-Programm ausführt, zuerst werden alle konstanten und statischen Variablen initialisiert, egal wo sie beschrieben sind, und dann werden die Klassenkonstruktoren aufgerufen.

Es scheint, dass globale Variablen mit const/static-Modifikatoren gemeint waren und Sie lokale Variablen verwenden.

 
Koldun Zloy:

Was genau ist für Sie ein Fehler?

Ich erhalte keine Fehler von VS2019.

der Fehler liegt darin, dass der MQL-Compiler mehrdeutige Ausdrücke zulässt, wenn es einen const-Modifikator gibt, dann ist es eine Konstante

derselbe Code nicht vom Compilerverfolgt wurde? die andere Situation wurde nachverfolgt.

Sharp in VS2019 unterstrich alles vor der Kompilierung.

class A{
public:
   int ivalue;
   int inc()const {static int v = 0; return(++v);}
   A():ivalue(0){}
};

class B{
public:
   int ivalue;
   int inc(){return(++ivalue);}
   B():ivalue(0){}
};

//+------------------------------------------------------------------+
void OnStart()
{
   const A a;
   Print(a.inc());  
   B b1;
   Print(b1.inc());
   const B b2;
   Print(b2.inc()); // 'inc' - call non-const method for constant object
}
//+------------------------------------------------------------------+
Sergey Dzyublik:

Sie müssen globale Variablen mit const/static-Modifikatoren gemeint haben, während Sie lokale Variablen verwenden.

Ich kann verwirrt sein, aber const Modifier Verhalten ist sehr verschieden von C #

 

Eine mit einem const-Modifikator deklarierte Variable kann nicht geändert werden. Der Compiler behält dies im Auge.

Sie erwarten wahrscheinlich, dass es etwas anderes tut.

 
Koldun Zloy:

Wahrscheinlich erwarten Sie etwas anderes von ihr.

Offensichtlich ja, ich erwarte, dass es das gleiche sein, wenn zwischen MQL und C# springen.

 

Gebäude 2366

namespace X
{

class A
{
public:
   A(){}
};

}  //  namespace X

class B : public X::A
{
public:
   B() : X::A()  //'X' - struct member undefined
   {
   }
};
 
Ilyas:

Danke für den Beitrag, ich werde es überprüfen.

mq5 - normal. mq4 - gebrochen. Sie können TypeToBytes_ExampleScript.mq4 von hier übernehmen. Er kompiliert nur, wenn Sie die Erweiterung in mq5 ändern.