Erros, bugs, perguntas - página 2680

 
Koldun Zloy:

Também aqui está tudo bem.

não está correcto!

Verifiquei-o especificamente na 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); }
    }

Erro CS0133 A expressão atribuída a "a" deve ser constante. ConsoleApp2 ..repos\ConsoleApp2\ConsoleApp2\Program.cs 13 Activo

Erro CS0133 A expressão atribuída a "b" deve ser constante. ConsoleApp2 ..repos\ConsoleApp2\ConsoleApp2\Program.cs 13 Activo

[Excluído]  
Igor Makanu:

o ano passado não funcionou dessa forma - testei especificamente modificadores constantes

e parece que@Ilyas explicou como executar um programa MQL, primeiro todas as constantes e estáticas são inicializadas, não importa onde são definidas, e depois os construtores de classes são chamados

ok, com esta inicialização estática / const - ainda pode ser devidamente distribuída, mas o facto de o modificador const não garantir que o compilador a verifique - muito inesperado - o meu segundo exemplo

Em ambos os seus exemplos, tudo funciona correctamente e é esperado.

 
Koldun Zloy:

Em ambos os seus exemplos, tudo funciona correctamente e é esperado.

espera-se, o modificador const const é 99% certo de que o compilador encontrará o meu erro ao compilar, VS2019 fá-lo, MQL não o faz

[Excluído]  
Igor Makanu:

o modificador de constantes esperado tem 99% de certeza que o compilador encontrará o meu erro ao compilar, VS2019 fá-lo, MQL não o faz

O que é que considera exactamente um erro?

Não recebo nenhum erro da VS2019.

 
Igor Makanu:

o ano passado não funcionou dessa forma - testei especificamente modificadores constantes

e parece que@Ilyas explicou como executar o programa MQL, primeiro todas as variáveis constantes e estáticas são inicializadas, não importa onde são descritas, e depois os construtores de classes são chamados.

Parece ser variáveis globais com modificadores const/static e está a usar variáveis locais.

 
Koldun Zloy:

O que é que considera exactamente um erro?

Não recebo nenhum erro da VS2019.

o erro é que o compilador MQL permite expressões ambíguas, se houver um modificador constante, então é uma constante

o mesmo código não foirastreado pelo compilador? a outra situação foi rastreada.

Sharp em VS2019 captou-o antes da sua compilação.

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:

Deve ter significado variáveis globais com modificadores constantes/estáticos, enquanto utiliza variáveis locais.

Posso estar confuso, mas o comportamento do modificador de constância é muito diferente do C#

[Excluído]  

Uma variável declarada com um modificador constante não pode ser alterada. O compilador mantém um registo disto.

Provavelmente espera-se que faça outra coisa.

 
Koldun Zloy:

Provavelmente espera-se algo diferente dele.

Aparentemente sim, espero que seja o mesmo quando saltar entre MQL e C#.

[Excluído]  

Construir 2366

namespace X
{

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

}  //  namespace X

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

Obrigado pelo correio, irei verificar

mq5 - normal. mq4 - quebrado. Pode tomar TypeToBytes_ExampleScript.mq4 a partir daqui. Só se compila se se alterar a extensão para mq5.