Erros, bugs, perguntas - página 2682

 

MT5 bug (build 2367) As prioridades de execução das funções do modelo em MQL não correspondem às do C++ (online: https://onlinegdb.com/B172m1PLL).
Parece que como parte da correcção do bug, o bug de compilação é corrigido, mas a prioridade de execução de funções de modelo sobrecarregadas ainda não está alinhada com o comportamento de C++.

template<typename T>
struct B{
   T data;
};

template<typename T>
struct BB : public B<T>{};


template<typename T>                                             
struct A{
public:
   static void test(T& src){
      printf("1");
   }
   
   template<typename TT>
   static void test(B<TT>& src){
      printf("2");
   }
};

                                         
struct AA{
public:
   static void test(B<int>& src){
      printf("1");
   }
   
   template<typename TT>
   static void test(B<TT>& src){
      printf("2");
   }
};
      

void OnStart(){
   BB<int> bb;
   
   A<B<int>>::test(bb);         // MQL:2,  should be 1     
   AA::test(bb);                // MQL:2,  should be 1     
}
 

Deparei-me com um problema engraçado. É impossível passar um tipo de modelo com vários tipos-parâmetros para uma macro, porque o pré-processador não sabe que lida com um modelo e considera os parâmetros por vírgulas.

Encontrei a descrição do problema e a sua solução para C++ no SO.

#define  COMMA ,
#define  XYZ(type) {type ptr;}

XYZ(TemplatedType<A COMMA B>); // ошибка

Experimentei-o em MQL, mas infelizmente não funcionou. O compilador dá um erro "identificador não declarado" para uma variável descrita pelo tipo passado.

Até agora, consegui com uma classe derivada adicional, mas posso corrigi-la como em C++?

Oops. Encontrei uma solução. É assim que funciona:

#define  COMMA() ,
A questão é eliminada.
Passing a template type into a macro
Passing a template type into a macro
  • 2017.05.30
  • bitmaskbitmask 22.3k1111 gold badges7070 silver badges133133 bronze badges
  • stackoverflow.com
I have a macro that takes a number of arguments, one of which is a type. For instance: If I try to instantiate this with a template type, say: This will not work as intended, as the pre-processor knows nothing of templates. It will...
 

MT5 bug (build 2367) localização de funções de modelo sobrecarregadas afecta o resultado da compilação.
O bilhete original sob o qual o trabalho foi feito -https://www.mql5.com/ru/forum/1111/page2655#comment_15119627
C++ online(https://onlinegdb.com/BJzbH2DLL).


class input_iterator_tag  {};
class forward_iterator_tag       : public input_iterator_tag         {};
class bidirectional_iterator_tag : public forward_iterator_tag       {};
class random_access_iterator_tag : public bidirectional_iterator_tag {};


template<typename _Iterator, typename _Tp>
_Iterator set_value(const _Iterator &it,  _Tp &value, const  forward_iterator_tag*  tag){
   printf("2\r\n");
   return set_value(it, value, (input_iterator_tag*)NULL);                // 'set_value' - ambiguous call to overloaded function        
};

template<typename _Iterator, typename _Tp>
_Iterator set_value(const _Iterator &it,  _Tp &value, const  bidirectional_iterator_tag*  tag){
   printf("3\r\n");
   return set_value(it, value, (forward_iterator_tag*)NULL);
};

template<typename _Iterator, typename _Tp>
_Iterator set_value(const _Iterator &it,  _Tp &value, const random_access_iterator_tag* tag){
   printf("4\r\n");
   return set_value(it, value, (bidirectional_iterator_tag*)NULL);
};

template<typename _Iterator, typename _Tp>
_Iterator set_value(const _Iterator &val,  _Tp &value, const input_iterator_tag* tag){
   printf("1\r\n");
   return val;
};


template<typename _Iterator, typename _Tp>
_Iterator set_value(const _Iterator &it, _Tp &value){
   return set_value(it, value, it.tag);                        
};


template<typename T>
struct A{
   T data;
   static random_access_iterator_tag* tag;
};

template<typename T>
random_access_iterator_tag* A::tag = NULL;

class B{};


void OnStart (){ 
   A<B*> it;
   const B* const b_ptr = new B();
   set_value(it, b_ptr);                                      
   
   A<int> it_int;
   const int value_int = 5;
   set_value(it, value_int);         
}

int main(){
   OnStart();
   return 0;
};
 

Defeitos na função do modelo/na operação de cache da classe:
(fixado por MT5(build 2368)) ***(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...
(fixado por MT5(build 2368)) * Compile Error, bug ao passar um ponteiro de função como um argumento de modelo de ref. constante.
(fixado por MT5(build 2368)) * Compile Error, o objecto B<int> pode ser criado após o objecto B<void*>, mas um erro de compilação ocorre se for feito antes.


Defeitos na função/classe de trabalho do modelo:
(fixado por MT5(build 2368)) ***(para cima) Erro de Compilação, erro dentro da função de modelo, ponteiro passado dentro dotipo de conversão explícita comporta-se como uma classe, caso contrário.
(fixado por MT5(build 2368)) **(para cima) Erro de Compilação, erro ao tentar aceder à classe interna para um parâmetro de modelo de uma função de modelo.
(não fixado por MT5(build 2368)) *** Compile Error, a queixa principal é um 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 é disparar aves com uma pena.
(não fixado por MT5(build 2368)) ** Compile Error, o erro 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 2368)) ** Erro de compilação, espaço de nomes e bug de âmbito no construtor do modelo quando se chama uma classe base quando o mesmo nome de classe é usado na herança e na classe interna.
(não fixado por MT5(build 2368)) * Erro de Compilação, erro na chamada da função modelo com tipos de argumentos explícitos quando chamada de uma função não modelo sobrecarregada.
(não corrigido por MT5(build 2368)) Erro de compilação, bug na definição de classe interna - nenhuma referência ao espaço de nomes global ao definir uma classe base.
(fixado por MT5(build 2368)) ** Compile Error, bug com geração de código de classe modelo quando se utiliza classe interna.
(fixado por MT5(build 2368)) ** Compile Error, bug na geração do método/classe do modelo, o processo de substituição automática do parâmetro do modelo está fora do scop para o código principal do programa.
(fixado por MT5(build 2368)) * Erro de compilação, erro com ausência de código de classe de template autogerado quando a classe de template actua como valor de retorno para o método de template.
(fixado por MT5(build 2368)) * Erro de compilação, erro na passagem da estrutura interna para a função modelo, otipo de dados resultante não pode ser utilizado como o tipo de dados base para outra estrutura interna na classe modelo.
(fixado por MT5(build 2368)) * Compile Error, a verificação de nomes de tipos de modelos reutilizados não é executada quando se declara uma função de modelo dentro de uma classe de modelo, o que leva a um comportamento inesperado.
(fixado por MT5(build 2368)) Erro de Compilação, defeitos múltiplos relacionados com o retorno do objecto "no local criado" quando o objecto é uma classe/estrutura de modelo.
(não fixado por MT5(build 2368)) *( Não é um bug, é uma característica) no construtor da classe base é impossível realizar previsões datilográficas explícitas na conversão de ponteiro para objecto da classe base para ponteiro para classe pai.


Defeitos relacionados com a inconsistência nas prioridades das chamadas de funções sobrecarregadas em MQL vs C++:
(fixado por MT5(build 2368)) **(para cima) Erro de Compilação, a prioridade de chamada de funções de modelo sobrecarregadas depende efectivamente do tipo de parâmetro do modelo, o que teoricamente não afecta o resultado da compilação.
(fixado por MT5(build 2368)) **(acima) Erro de Compilação quando a primeira função de modelo sobrecarregada utiliza uma classe base de modelo totalmente especializada e a segunda utiliza uma classe base de modelo não especializada.
(não fixado por MT5(build 2368)) ** Compile Error, ocorre um erro de compilação ao gerar código para uma função de modelo, apesar de haver uma função de modelo sobrecarregada com uma assinatura adequada para os parâmetros passados.
(não fixado por MT5(build 2368)) * Erro de Compilação, "chamada ambígua para função sobrecarregada" quando funções de modelo sobrecarregadas com diferentes números de parâmetros de modelo são chamadas.
(fixado por MT5(build 2368)) *** Erro de compilação ao herdar classes A <= B <= C <= D e implementar duas funções de sobrecarga, por exemplo, uma com o parâmetro A* e a segunda com o parâmetro B*, passando depois um objecto C* ou D* em tal função no MQL causa um erro de compilação "chamada ambígua para função sobrecarregada".
(fixado por MT5(build 2368)) ** Tempo de execução, desajuste prioritário para chamadas de funções de modelo sobrecarregadas.

Defeitos relacionados com a execução lenta de funções, desempenho do optimizador de código:
(fixado por MT5(build 2368)) ** Tempo de execução, grande sobrecarga ao adicionar um elemento de cada vez a uma matriz usando o ArrayResize, apesar de a memória para eles ter sido reservada, por exemplo, as estruturas são até 7 vezes mais lentas.


Sugestões:
(novo) link - sobre a implementação de suporte intellisense para a funcionalidade namespace baseada no trabalho intellisense para métodos estáticos em classes.
link- para permitir que os literais e variáveis temporárias sejam passados como argumentos da função const ref.
link- aomover ficheiros de projectos no separador Projecto, para ficheiros movidos que estão abertos e 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.

 
erro de compilação MT5 (build 2368) quando se utiliza o modificador de acesso por defeito quando se herda em classe de modelo, quando o parâmetro de modelo actua como classe base.
Tudo funcionava antes, aparentemente algo se partiu como parte da reparação de outros insectos.

class A{};

template<typename T>
class B : T{};            //'A' - unexpected token      

template<typename T>
class BB : private T{};

   
void OnStart(){    
   BB<A> bb;      // Ok
   B<A> b;        // Compile Error: 
}
 

erro de compilação do bug MT5 (build 2368) ao chamar a declaração de atribuição através da indicação explícita da classe base. O problema ocorre parauma classe de modelo com parâmetro de modelo como classe base.
Funcionou antes, aparentemente algo se partiu como parte da reparação de outros insectos.

struct A{
   uchar data;
   void operator=(int n){
      printf("1");
   }
};

template<typename T>
struct B : public T{
   void operator=(int n){
      T::operator=(n);    //'operator' - undeclared identifier  
   }
};

   
void OnStart(){    
   B<A> b;        
   b = 0;
}
 
A actualização do MT5 de todos a partir de 08.03.2020 começou a ter um historial comercial de saltos?
Arquivos anexados:
 

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

Insectos, insectos, perguntas

fxsaber, 2020.03.22 10:04

mq5 está ok. O mq4 está partido. Pode tomar TypeToBytes_ExampleScript.mq4 a partir daqui. Só se compila se alterar a extensão para mq5.

2368 - nada mudou.

 

Através de um terminal MT5 podia sempre entrar na conta de qualquer corretor. Se houvesse um problema com o primeiro login, eu simplesmente usava as ferramentas do Terminal para procurar o corretor apropriado, obtendo automaticamente os dados dos seus servidores comerciais. Depois disso, poderia iniciar sessão sem qualquer problema.


Hoje enfrentei pela primeira vez uma situação (novo corretor), que nada ajuda. Não consigo iniciar sessão. Em registos escreve.

2020.03.25 09:50:33.538  'xxx': no connection to XXX-Server


Descarreguei o terminal nativo do corretor - inicie imediatamente a sessão. O meu terminal de investigação - nem pensar. Pela primeira vez, tal.

Pode dizer-me como fazer com que um terminal não nativo seja capaz de se ligar à conta de negociação?

 
fxsaber:

Pode dizer-me como fazer com que um terminal não nativo seja capaz de se ligar a uma conta de negociação?

Em mt4 tive de copiar ficheiro server.ini para outro terminal, para não ter de procurar servidores comerciais

não sei em mt5

Razão: