Erros, bugs, perguntas - página 1662

 
fxsaber:

Porquê o aviso num local plano?

Não há sobrecarga desta função com uchar. Há apenas char. É por isso que alerta que a constante é maior do que 127.
 
Sergei Vladimirov:
Não há sobrecarga desta função com uchar. Há apenas char. É por isso que alerta se a constante for maior do que 127.
Porque é que este erro não ocorre de todo? Porque não há sobrecarga para as arrays uchar (se a ajuda não mentir).
 
Alexey Viktorov:

Se mostra valores semelhantes à verdade, mas conta com os dados errados, acontece que o problema está em mql5 e não no testador ou visualizador.

Em geral, obrigado pela vossa participação, lutarei contra o problema a longo prazo. E irá verificar outra secção semelhante da moeda hoje em dia. Talvez seja o problema das carraças neste local, hhz?

Verifiquei-o. Tudo conta bem. Aparentemente, há um insecto na geração de carraças num determinado lugar da história.
 
fxsaber:
Então porque é que não há erro algum? Não há sobrecarga para as arrays de uchar (se a ajuda estiver correcta).
Agora esta é uma questão válida.
 
fxsaber:
Então porque é que não há erro algum? Porque não há sobrecarga para as arrays de uchar (se a ajuda estiver correcta).
Aparentemente porque as matrizes são idênticas. A diferença entre char e uchar está apenas na interpretação pelo compilador. De facto, também não deve haver aí qualquer aviso, pois nada é realmente truncado, pode verificar.
 
Alexey Navoykov:
Aparentemente porque as matrizes são idênticas. A diferença entre char e uchar está apenas na interpretação do compilador. De facto, não deve haver aí qualquer aviso, porque nada é realmente truncado, pode ver por si mesmo.
Aí é copiado byte a byte. Assim, com todos os assinados <-> não assinados.
 
A100:

Mas este (e os anteriores com typedef) são erros incidentais - ainda não encontrei o principal, porque não há nenhum typedef com a mesma assinatura no programa fonte (como neste exemplo).

Consegui fazer um guião de teste próximo do programa fonte com um erro durante a execução

//Script1.mq5
typedef int (*GTW)( uint, uint, int );
#import "Script2.ex5"
        void f( GTW );
#import "Script3.ex5"
        int g( uint, uint, int );
#import
void OnStart() { f( g ); }
//Script2.mq5
#property library
typedef int (*GTW)( uint, uint, int );
void f( GTW ff ) export { ff( 0x1, 0x1, 0 ); }
//Script3.mq5
#property library
int g( uint, uint, int ) export
{
        Print( __FUNCSIG__ );
        return 0;
}

Resultado: chamada do ponteiro de funções inválido em 'Script2.mq5

E agora o truque... - Substitua o GTW em todos os ficheiros por GT e verifique o resultado !

 

Aconselha-se sobre a sintaxe, como reescrever correctamente uma função como esta

MqlTick Func()
{
  MqlTick Tick = {0};
  
  return(Tick);
}

a algo como

MqlTick Func()
{
  return(MqlTick(0));
}

ou algo parecido com isto

MqlTick Func()
{
  return(new MqlTick);
}

Isto é, não escreva uma parte separada criando a estrutura a ser devolvida.

 

Recentemente (desde há cerca de um mês) em discussões sobre projectos de serviço 'Trabalho', depois de dactilografar um monte de texto com citações e ilustrações, depois de o submeter tudo vai para ... buraco #403


Nenhum novo envio do formulário não ajuda - depois de recarregar a página tenho de digitar tudo novamente

Caro editor, pode explicar que nova revolução foi inventada para benefício dos utilizadores, e como fugir dela?
 
Alexander Puzanov:

Recentemente (desde há cerca de um mês) em discussões sobre projectos de serviço 'Trabalho', depois de dactilografar um monte de texto com citações e ilustrações, depois de o submeter tudo vai para ... buraco #403


Nenhum novo envio do formulário não ajuda - depois de recarregar a página tenho de digitar tudo novamente

Caro editor, pode explicar que nova revolução foi inventada para benefício dos utilizadores, e como fugir dela?
No canto superior esquerdo do editor, prima SEMPRE o botão HTML, depois CTRL+A e CTRL+C antes de enviar um grande post. Dessa forma, tudo fica no tampão. E se ocorrer um erro. Terá de utilizar novamente o botão HTML, e depois CTRL+A e CTRL+V. Vai poupar muito stress.