Erros, bugs, perguntas - página 2952

 
Alexey Rassvetnyy:

Por favor, corrija este erro. A MQL5 não permite a utilização de alguns enumeros integrados como parâmetros genéricos, por exemplo: ENUM_CHART_PROPERTY_DOUBLE, ENUM_CHART_PROPERTY_STRING.

Não há problema com os enumeros personalizados e outros enumeros incorporados.

O problema surge porque o enumero não tem um elemento com um valor zero. Consegui criar o meu próprio enumero que gera este erro de compilação.

#include <Generic\HashMap.mqh>
enum TEST_ENUM {
   ENUM1, ENUM2
};
enum TEST_ENUM2 { //отсутствует элемент с номером 0
   ENUM1=-10, ENUM2
};
void OnStart()
  {
   CHashMap<ENUM_CHART_PROPERTY_INTEGER,int> mapI;    // эта срока комилируется без ошибок
   CHashMap<ENUM_CHART_PROPERTY_DOUBLE,double> mapD;  // здесь ошибки компиляции: 'NULL' - cannot convert enum  HashMap.mqh     21      39. 'NULL' - cannot convert enum        HashMap.mqh     462     30
   CHashMap<ENUM_CHART_PROPERTY_STRING,string> mapS;  // здесь ошибки компиляции: 'NULL' - cannot convert enum  HashMap.mqh     21      39. 'NULL' - cannot convert enum        HashMap.mqh     462     30
   CHashMap<TEST_ENUM,double> mapE;    // эта срока комилируется без ошибок
   CHashMap<TEST_ENUM2,double> mapE2;    // здесь ошибки компиляции: 'NULL' - cannot convert enum       HashMap.mqh     21      39. 'NULL' - cannot convert enum        HashMap.mqh     462     30
  }
 
Alexey Rassvetnyy:

O problema ocorre porque o enumero não contém um elemento com um valor nulo. Conseguimos criar o nosso próprio enumero, o que gera este erro de compilação.

No seu caso, a fixação do ficheiro da biblioteca ajudará

//+------------------------------------------------------------------+
//| fix HashMap.mqh                                                  |
//|  line 21  | was | Entry(void): key(NULL) {}                      |
//|           | now | Entry(void): key((TKey)NULL) {}                |
//|  line 462 | was | m_entries[i].key=NULL;                         |
//|           | now | m_entries[i].key=(TKey)NULL;                   |
//+------------------------------------------------------------------+
 
DMITRII PECHERITSA:

No seu caso, a fixação do ficheiro da biblioteca ajudará

Obrigado, funciona.

No entanto, se eu corrigir manualmente um ficheiro que suporte MQ, a próxima actualização irá fazer retroceder as minhas alterações. Precisamos dos programadores que suportam a biblioteca padrão para fazer castoff NULL para tipos paramétricos em todo o código da biblioteca padrão ou tighten compiler para fazer NULL pode automaticamente fundir para qualquer tipo sem instruções explícitas.

 
Alexey Rassvetnyy:

Os programadores que suportam biblioteca padrão devem lançar NULL para tipos paramétricos através de código de biblioteca padrão ou apertar o compilador para fazer o NULL lançar automaticamente para qualquer tipo sem instruções explícitas.

Os promotores têm um princípio: quanto mais simples, melhor. Bem, não é assembler, por isso pode utilizá-lo. Talvez seja assim que deve ser.

 
DMITRII PECHERITSA:

No seu caso, a fixação do ficheiro da biblioteca ajudará

Obrigado pela sua mensagem.

Fez estas correcções no SB

 
Ilyas:

Obrigado pela sua mensagem.

Fez estas correcções no SB

Corrigido não só por chaves mas também por valores?

 
Stanislav Korotky:

Corrigido não só por chaves mas também por valores?

Sim, também para valores

 
Ilyas:

É possível que o depurador, ao mostrar o conteúdo de uma estrutura, seja capaz de remover alguns dos seus campos dos observados?


Existem várias grandes estruturas. É necessário compará-los por cinco campos com os seus olhos. Não funciona.

 

Bom dia! Por favor, ajudem-me a resolver este problema.

Antes de enviar e verificar um pedido comercial no MT5-advisor, utilizo a seguinte variante de definição detipo_enchimento:

// тип FILLING
int SYMBOL_FILLING = (int)SymbolInfoInteger(iNameSymbol, SYMBOL_FILLING_MODE);
switch(SYMBOL_FILLING)
{
   case SYMBOL_FILLING_FOK:   iЗапрос.type_filling = ORDER_FILLING_FOK;    break;
   case SYMBOL_FILLING_IOC:   iЗапрос.type_filling = ORDER_FILLING_IOC;    break;
   default:                   iЗапрос.type_filling = ORDER_FILLING_RETURN; break;
}

Mas deparei-me com o facto de esta construção acabar por não funcionar em todas as contas e não para todos os corretores, e após verificar um pedido pronto através da OrderCheck, aparece o erro 10030 (é especificado um tipo de execução de ordem não suportada por saldo). Neste caso, SYMBOL_FILLING = 3, e o tipo ORDER_FILLING_RETURN é seleccionado.

Não utilizo quaisquer bibliotecas externas (como a CTrade). Por favor, ajude-me ou oriente-me para onde posso obter a resposta à minha pergunta.

Obrigado de antemão!

 
fxsaber:

É possível que o depurador, ao mostrar o conteúdo de uma estrutura, seja capaz de remover alguns dos seus campos dos observados?


Existem várias grandes estruturas. É necessário compará-los por cinco campos com os seus olhos. Não funciona.

A melhor maneira é exibir o valor de qualquer variável no cursor do rato na fonte - para que não seja necessário acrescentar nada à lista de observação e o campode qualquer nidificação está disponível sem uma cadeia de desreferenciação (e campos vizinhos).