Errores, fallos, preguntas - página 2680

 
Koldun Zloy:

Todo está aquí también.

no está bien.

Lo he comprobado específicamente en 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); }
    }

Error CS0133 La expresión asignada a "a" debe ser constante. ConsoleApp2 ..\Nrepos\NConsoleApp2\NConsoleApp2\NProgram.cs 13 Activo

Error CS0133 La expresión asignada a "b" debe ser constante. ConsoleApp2 ..\Nrepos\NConsoleApp2\NConsoleApp2\NProgram.cs 13 Activo

 
Igor Makanu:

no es así como funcionaba el año pasado - he probado específicamente los modificadores const

y parece que@Ilyas explicó cómo ejecutar un programa MQL, primero se inicializan todas las const y static, sin importar dónde estén definidas, y luego se llaman los constructores de la clase

ok, con esta inicialización static / const - todavía se puede distribuir correctamente, pero el hecho de que el modificador const no garantiza que el compilador lo compruebe - muy inesperado - mi segundo ejemplo

En tus dos ejemplos todo funciona correctamente y es lo esperado.

 
Koldun Zloy:

En tus dos ejemplos todo funciona correctamente y es lo esperado.

como es de esperar, el modificador const es 99% seguro que el compilador encontrará mi error al compilar, VS2019 lo hace, MQL no lo hace

 
Igor Makanu:

modificador const esperado es 99% seguro que compilador encontrará mi error al compilar, VS2019 lo hace, MQL no lo hace

¿Qué considera exactamente un error?

No me sale ningún error de VS2019.

 
Igor Makanu:

el año pasado no funcionó así - probé específicamente los modificadores const

y parece que@Ilyas explicó cómo ejecutar el programa MQL, primero se inicializan todas las variables const y estáticas, no importa donde se describan, y luego se llaman los constructores de la clase.

Parece que son variables globales con modificadores const/estáticos y tú estás usando variables locales.

 
Koldun Zloy:

¿Qué considera exactamente un error?

No me sale ningún error de VS2019.

el error es que el compilador MQL permite expresiones ambiguas, si hay un modificador const, entonces es una constante

¿este mismo código no fuerastreado por el compilador? la otra situación ha sido rastreada.

Sharp en VS2019 subrayó todo antes de la compilación.

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:

Te habrás referido a las variables globales con modificadores const/estáticos, mientras que tú utilizas las locales.

Puede que esté confundido, pero el comportamiento de los modificadores const es muy diferente al de C#

 

Una variable declarada con un modificador const no puede ser modificada. El compilador hace un seguimiento de esto.

Probablemente esperas que haga otra cosa.

 
Koldun Zloy:

Probablemente esperes algo diferente de él.

Aparentemente sí, espero que sea lo mismo al saltar entre MQL y C#.

 

Construir 2366

namespace X
{

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

}  //  namespace X

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

Gracias por el post, lo comprobaré

mq5 - normal. mq4 - roto. Puedes tomar TypeToBytes_ExampleScript.mq4 desde aquí. Sólo se compila si se cambia la extensión a mq5.