Erros, bugs, perguntas - página 2670

 

Erro do testador (ou talvez já não o compreenda)

Falta o comércio de lucro no testador

 

Outro encontro com o bug anteriormente descrito- "Comportamento indefinido, cria-se várias vezes um objecto complexo embrulhado com tipo interno "C", mas acaba por ser um tipo de dados completamente diferente, talvez "B", talvez "int", o que se quiser...".
De facto, foi preciso um dia para localizar, reproduzir e encontrar soluções de trabalho, infelizmente tudo em vão...
Anteriormente sugeriu-se uma alternativa utilizando um parâmetro de modelo fictício, pois o exemplo abaixo revelou-se inútil.

template<typename _Tp, typename _Opt>
struct It_g{
   class Opt : public _Opt{}; 
   _Tp p;
};

template<typename _Tp>
class A_g{
public:
   struct It : public It_g<_Tp, Opt_g<_Tp>>{};
};

template<typename _Tp>
class V{
public:
   struct It : public  A_g<_Tp>::It{};
   It b;
};

template<typename _Tp>
class Opt_g{
   template<typename _It>
   static void test(_It &it){      
      printf(typename(_Tp));          // int
      printf(typename(it.p));         // ClassA*
      
      _Tp p = it.p;                   // Compiler Error: '=' - illegal operation use
   };
};


template<typename T>
class GetStructType{
public:
   struct type : public T{};
};

template<typename _It>
void test(_It &it){
   GetStructType<_It>::type::Opt::test(it);
}

class ClassA{};


void OnStart(){ 
   V<int> v1;
   test(v1.b);
   
   V<ClassA*> v2;
   test(v2.b);
   
   V<int>::It it3;
   test(it3);
   
   V<ClassA*>::It it4;
   test(it4);
}

A única solução exequível que consegui obter utilizando o tipo de automóvel "caseiro", mas consegui enormes custos de compilação e nenhum lucro na velocidade do código real...
Por favor, ajudem, talvez alguém tenha uma ideia de como trabalhar em torno dela.

 
Alexey Klenov:

Erro do testador (ou talvez já não o compreenda)

O visualizador, por razões arquitectónicas, nem sempre mostra o estado actual.

 
fxsaber:

O visualizador, por razões arquitectónicas, nem sempre mostra o estado real.

Obrigado, terei isso em mente.
 

Defeitos na função do modelo/cache da classe:
(não corrigidos por MT5(build 2361)) *** (para cima) Comportamento indefinido, cria-se várias vezes um objecto complexo embrulhado com tipo interno "C" e acaba por ser um tipo de dados completamente diferente, talvez "B", talvez "int", o que se quiser...
(não fixado por MT5(build 2361)) * Compile Error, bug ao passar um ponteiro de função como um argumento de modelo de ref. constante.
(não fixado por MT5(build 2361)) * Compile Error, B<int> object pode ser criado depois de B<void*> class object, mas o erro de compilação ocorre se for feito antes.


Defeitos na função/classe do modelo:
(não corrigidos por MT5(build 2361)) *** (para cima) Compile Error, bug dentro de uma função modelo, um ponteiro passado dentro de umaconversão de tipo explícito comporta-se como uma classe em outros casos como um ponteiro.
(não fixado por MT5(build 2361)) ** Compile Error, bug com geração de código de classe modelo quando se utiliza classe interna.
(não fixo em MT5(build 2361)) ** Erro de compilação, erro na tentativa de acesso à classe interna para parâmetro de função de modelo de modelo.
(não fixado por MT5(build 2361)) ** Compile Error, bug na geração do método/classe do modelo, o processo de "auto-reposição" do parâmetro do modelo sai do scop para o código principal do programa.
(não fixado por MT5(build 2361)) * Erro de compilação, erro com falta de código de classe de template autogerado quando a classe de template actua como valor de retorno para o método de template.
(não fixado por MT5(build 2361)) * Compile Error, bug quando a estrutura interna é passada para a função template, otipo de dados resultante não pode ser usado como um tipo de dados base para outra estrutura interna na classe template.
(não fixado por MT5(build 2361)) * Erro de Compilação, erro ao chamar uma função modelo com tipos de argumentos explícitos quando chamada a partir de uma função não modelo sobrecarregada.

(não corrigido por MT5(build 2361)) Erro de compilação, bug na definição de classe interna - nenhuma referência ao namespace global ao especificar uma classe base.
(não fixado
por MT5(build 2361)) *** (novo) Compile Error, principal alegação de aviso de saída inadequado - "comportamento depreciado, chamada de método oculto será desactivado numa futura versão do compilador MQL".A implementação actual está a disparar um canhão sobre um pardal.
(
não fixado por MT5(build 2361)) ** (novo) Compile Error, o bug diz respeito ao valor de retorno de uma função de modelo quando o valor de retorno é uma classe interna dentro de uma classe de modelo cujo tipo de parâmetro é definido pelo tipo de argumento da função de modelo.
(
não fixado por MT5(build 2361)) * (novo)Compile Error, a verificação de nomes de tipos de modelos reutilizados não é efectuada ao declarar uma função de modelo dentro de uma classe de modelo, o que leva a um comportamento inesperado.
(
não fixado por MT5(build 2361)) * (novo) Runtimer Error, no construtor da classe base é impossível realizar previsões explícitas sobre o ponteiro de fundição para objecto da classe base para ponteiro para a classe pai.
(
não corrigido por MT5(build 2361)) (novo) Erro de Compilação, múltiplos defeitos relacionados com o retorno do objecto "no local criado" quando a classe/estrutura do modelo é o objecto.


Defeitos relacionados com a descoordenação de chamadas prioritárias para funções sobrecarregadas em MQL vs C++:
(não fixado por MT5(build 2361)) *** Quando há herança de classes A <= B <= C <= D e duas funções de sobrecarga são implementadas, por exemplo, uma com o parâmetro A* e a segunda com o parâmetro B*, passando depois em tal função um objecto C* ou D* em MQL causa um erro de compilação "chamada ambígua para função sobrecarregada".
(não fixado por MT5(build 2361)) ** Tempo de execução, desajuste prioritário para chamadas de funções de modelo sobrecarregadas.
(não corrigido por MT5(build 2361)) ** Compile Error, a prioridade das chamadas de funções de modelo sobrecarregadas depende realmente do tipo de parâmetro do modelo, o que em teoria não deve afectar o resultado da compilação.
(não fixado por MT5(build 2361)) ** Embora exista uma função de modelo sobrecarregada com uma assinatura adequada para os parâmetros passados, ocorre um erro de compilação ao gerar o código da função de modelo.


Defeitos relacionados com a execução lenta de funções, trabalho de optimização de código:
(não fixado por MT5(build 2361)) ** (novo) Tempo de execução, grande sobrecarga ao adicionar um elemento de cada vez num array utilizando o ArrayResize, apesar de a memória para eles ter sido reservada com antecedência, por exemplo, as estruturas são até 7 vezes mais lentas.


Sugestões:
link- sobre permitir que as variáveis literais e temporárias sejam passadas como argumentos da função const ref.
link- aomover ficheiros de projectos no separador "Projecto", para ficheiros movidos que estão abertos e estão nos separadores ME, para actualizar automaticamente o seu caminho de localização.
link- para introduzir a funcionalidade de declaração de typedef em MQL.
link- sobre a possibilidade de forçar a geração de construtores de cópias por defeito e operadores de atribuição.

 
fxsaber:

O visualizador nem sempre mostra o estado actual por razões arquitectónicas.

Alexey Klenov:
Obrigado, vou ter isso em mente.

Curado por alguns carrapatos (F12) após uma pausa.

 
Andrey Khatimlianskii:

Curado por alguns carrapatos (F12) após uma pausa.

Obrigado. Vou tentar.

 
Sergey Dzyublik:

Outro encontro com o bug anteriormente descrito- "Comportamento indefinido, cria-se várias vezes um objecto complexo embrulhado com tipo interno "C", mas acaba por ser um tipo de dados completamente diferente, talvez "B", talvez "int", o que se quiser...".
De facto, foi preciso um dia para localizar, reproduzir e encontrar soluções de trabalho, infelizmente tudo em vão...

Finalmente, consegui encontrar uma solução aceitável.
Acontece que a utilização de um membro da classe estática fornece uma forma de contornar o bug descrito acima:

template<typename _Tp, typename _Opt>
struct It_g{
   class Opt : public _Opt{}; 
   _Tp p;
   
   static Opt opt;
};

template<typename _Tp, typename _Opt>
static It_g::Opt It_g::opt;


template<typename _Tp>
class A_g{
public:
   struct It : public It_g<_Tp, Opt_g<_Tp>>{};
};

template<typename _Tp>
class V{
public:
   struct It : public  A_g<_Tp>::It{};
   It b;
};


template<typename _Tp>
class Opt_g{
   template<typename _It>
   static void test(_It &it){      
      printf(typename(_Tp));          // ClassA*
      printf(typename(it.p));         // ClassA*
      
      _Tp p = it.p;                   // OK
   };
};


template<typename _It>
void test(_It &it){
   it.opt.test(it);
}

class ClassA{};


void OnStart(){ 
   V<int> v1;
   test(v1.b);
   
   V<ClassA*> v2;
   test(v2.b);
   
   V<int>::It it3;
   test(it3);
   
   V<ClassA*>::It it4;
   test(it4);
}
 

Como corrigir este erro de armazenamento?


Gradualmente, recusa-se a guardar cada vez mais ficheiros. Em breve, tudo o que estiver armazenado será impossível de actualizar.

 

Os lucros/perdas na ponta da ferramenta para ordens de stop stop de compra e para ordens de stop de venda são calculados incorrectamente.

Ao passar o rato por cima do tp

ao passar o rato por cima do sl