Errori, bug, domande - pagina 2680

 
Koldun Zloy:

Anche qui è tutto a posto.

non corretto!

Ho controllato specificamente in VS2019:

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); }
    }

Errore CS0133 L'espressione assegnata ad "a" deve essere costante. ConsoleApp2 ..\repositoConsoleApp2\ConsoleApp2\Program.cs 13 Active

Errore CS0133 L'espressione assegnata a "b" deve essere costante. ConsoleApp2 ..\repositoConsoleApp2\ConsoleApp2\Program.cs 13 Active

 
Igor Makanu:

l'anno scorso non ha funzionato così - ho testato specificamente i modificatori di cost

e sembra che@Ilyas abbia spiegato come eseguire un programma MQL, prima tutti i const e static sono inizializzati, non importa dove sono definiti, e poi i costruttori di classe sono chiamati

ok, con questa inizializzazione static / const - può ancora essere distribuito correttamente, ma il fatto che il modificatore const non garantisce che il compilatore lo controlli - molto inaspettato - il mio secondo esempio

In entrambi i vostri esempi tutto funziona correttamente ed è previsto.

 
Koldun Zloy:

In entrambi i vostri esempi tutto funziona correttamente ed è previsto.

prevedibilmente, il modificatore const è sicuro al 99% che il compilatore troverà il mio errore durante la compilazione, VS2019 lo fa, MQL non lo fa

 
Igor Makanu:

Il modificatore const previsto è sicuro al 99% che il compilatore troverà il mio errore durante la compilazione, VS2019 lo fa, MQL non lo fa

Cosa considera esattamente un errore?

Non ricevo alcun errore da VS2019.

 
Igor Makanu:

l'anno scorso non ha funzionato così - ho testato specificamente i modificatori di cost

e sembra che@Ilyas abbia spiegato come eseguire un programma MQL, prima vengono inizializzate tutte le variabili costanti e statiche, non importa dove sono descritte, e poi vengono chiamati i costruttori di classe.

Sembra che si intendesse variabili globali con modificatori const/static e voi state usando variabili locali.

 
Koldun Zloy:

Cosa considera esattamente un errore?

Non ricevo alcun errore da VS2019.

l'errore è che il compilatore MQL permette espressioni ambigue, se c'è un modificatore const, allora è una costante

questo stesso codice non è statotracciato dal compilatore? l'altra situazione è stata tracciata.

Sharp in VS2019 ha sottolineato tutto prima della compilazione.

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:

Devi aver inteso variabili globali con modificatori const/static, mentre tu usi quelle locali.

Forse sono confuso, ma il comportamento del modificatore const è molto diverso da quello di C#

 

Una variabile dichiarata con un modificatore const non può essere cambiata. Il compilatore tiene traccia di questo.

Probabilmente vi aspettate che faccia qualcos'altro.

 
Koldun Zloy:

Probabilmente vi aspettate qualcosa di diverso.

Apparentemente sì, mi aspetto che sia lo stesso quando si salta tra MQL e C#.

 

Edificio 2366

namespace X
{

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

}  //  namespace X

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

Grazie per il post, controllerò

mq5 - normale. mq4 - rotto. Potete prendere TypeToBytes_ExampleScript.mq4 da qui. Si compila solo se si cambia l'estensione in mq5.

Motivazione: