Erros, bugs, perguntas - página 1784

 
Rashid Umarov:
Veja aqui - Execução do programa

Para um resumo dos programas em MQL5, ver o quadro abaixo:

Programa

Execução

Nota

Roteiro

No seu próprio fio condutor, tantos guiões quantos os fios de execução para eles

Um guião em loop não pode interromper o trabalho de outros programas

Perito

No seu próprio fio, tantos especialistas - tantos fios de execução para eles

Um perito em loop não pode interromper o trabalho de outros programas

Indicador

Um fio de execução para todos os indicadores num só símbolo. Tantos símbolos indicadores - tantos fios de execução para eles

O loop infinito num único indicador irá parar todos os outros indicadores neste símbolo

Obrigado, era isso que eu queria dizer

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Insectos, insectos, perguntas

Slawa, 2017.02.06 07:22

Mas também aqui não pode contar com o facto de que o comando Deinit em M5 será processado antes do comando Init em M15

 
-Aleks-:

Infelizmente, não estou familiarizado com este formato.

A experiência mostrou que o número no buffer gráfico é representado pelas mesmas regras que o dobro - ou seja, não é possível passar um número tão longo através do buffer gráfico - frustrante.

Infelizmente, o buffer gráfico só pode conter um número de 10 dígitos.

A propósito, porque é que existe um limite de 4 casas decimais?

 

Erro de compilação (ou melhor, nenhuma mensagem de erro)

class A {
public:
        int i;
};
class B : public A {};
class C : protected A {};
class D : protected B {};
void OnStart()
{
        C c;
        Print( c.i ); //Error: 'i' - protected member access error
        D d;
        Print( d.i ); //нормально???
}
 

Erro de execução: o carregamento de EX5 falhou

class A;
typedef void (*f)( A*);
class A {
    virtual void g( A *a ) {}
        f ff;
};
void OnStart() { Print( __FUNCTION__ ); }
 

Erro durante a execução

class B;
void f( B* );
class A { public:
        virtual ~A() { f((B *)&this ); } //(*)
        virtual void g( A* ) { Print( __FUNCTION__ ); }
};
class B : public A { public:
        virtual void g( A* ) { Print( __FUNCTION__ ); }
};
void f( B *b ) { b.g( b ); }
void OnStart() //(1)
{
        B *b = new B;
        delete b;
}

Resultado: fundição incorrecta de apontadores em (*)

E se

void OnStart() { B b; } //(2)

resultado: B::g

mas qual é a diferença fundamental entre OnStart (1) e (2)?

Além disso, o resultado de um código semelhante em C++: A::g

 

A100: 

Para que serviria um destruidor virtual como o do seu exemplo acima? Pode ser anulado na descendência?

 
fxsaber:

Para que serviria um destruidor virtual como o do seu exemplo acima? Pode ser anulado na descendência?

Na MQL é sempre virtual, mesmo que não explicitamente especificado
 
A100:
Na MQL é sempre virtual, mesmo que não seja explicitamente declarado
Então não respondeu à pergunta - para quê?
 
fxsaber:
Então ainda não respondeu à pergunta - para quê?
Se todos os destruidores na MQL são virtuais, então a questão porque é que precisamos de um destruidor virtual resume-se a para que é que precisamos de um destruidor? E esta é uma questão demasiado geral.
 
A100:
Se todos os destruidores na MQL são virtuais, então a questão de para que serve um destruidor virtual é reduzida à questão de para que serve um destruidor? E esta é uma questão demasiado geral.
Sei para que é utilizado um destruidor. Não está claro para mim porque devo acrescentar a palavra virtual antes da sua definição.