Erros, bugs, perguntas - página 1543

 
comp:

Por exemplo, na descrição do ObjectSetInteger agora

Deve ser

Leia todos os artigos até ao fim.

prop_id

[em] Identificador do bem objecto. O valor pode ser um dos valores da enumeração ENUM_OBJECT_PROPERTY_INTEGER.

Já vos disse. Leia atentamente a documentação sem um sabre na sua mão.
 
Slawa:

Ler os fios até ao fim

Já vos disse. Leia a documentação cuidadosamente, sem um sabre na mão.

Leia MUITO cuidadosamente e até ao fim. A sua citação é de lá

Identificador de um bem objecto. O valor pode serum dos valores da enumeraçãoENUM_OBJECT_PROPERTY_INTEGER.

Deve ser

Identificador de propriedade do objecto. Ovalor DEVE ser um dos valores deENUM_OBJECT_PROPERTY_INTEGERenumeração.

O requisito de um fantasma explícito para este tipo é confirmado pela única variante compilada em cinco (verifique-o você mesmo). Sem este fantasma, o compilador queixa-se da ausência de sobrecargas correspondentes.

 
Eu não conhecia este truque. Se abrir um ficheiro mq4 num meta-editor de cinco, ele será compilado no ex4!
 
um compilador um editor
 

Ou seja, quando terminou a sua leitura, pensou "O valor pode ser um dos valores da enumeraçãoENUM_OBJECT_PROPERTY_INTEGER. Ou pode não ser. E o que não pode ser especificado na documentação, pelo que tudo o que não seja proibido é permitido. Uma vez que estamos a alargar os princípios da vida social à programação".

O que será que o MetaEditor lhe disse sobre o tipo do parâmetro correspondente quando define os parâmetros desta função?

 
Há muitas ambiguidades na ajuda do MQL. Portanto, nesse sentido, comp é correcto - quanto menos interpretações possíveis da leitura da ajuda, melhor.
 
Slawa:

Ou seja, ao terminar a sua leitura, pensa "O valor pode ser um dos valores da enumeraçãoENUM_OBJECT_PROPERTY_INTEGER. Ou pode não ser. E o que não pode ser especificado na documentação, pelo que tudo o que não seja proibido é permitido. Uma vez que estamos a alargar os princípios da vida social à programação".

Não, eu não pensava assim. Pensei que se o código compilado correctamente com MT4, também deveria ser compilado correctamente com MT5. Quando não o fez, comecei a cavar. Verifique o código no MT4 e no MT5 e certifique-se

class CHARTOBJECT
{
public:
  template <typename T>
  void SetProperty( const int id, const T Value, const int Modifier = 0 ) const
  {
    const string sType = typename(T);

    if (sType == "double")
      ::ObjectSetDouble(0, "", id, Modifier, (double)Value);
    else if (sType == "string")
      ::ObjectSetString(0, "", id, Modifier, (string)Value);
    else
      ::ObjectSetInteger(0, "", id, Modifier, (long)Value);

    return;
  } 
  
  virtual void operator =( const string Value ) const
  {
    this.SetProperty(OBJPROP_TEXT, Value);

    return;
  }
};

O que será que o MetaEditor lhe disse sobre o tipo de parâmetro relevante quando datilografou os parâmetros desta função?

Corrigiu-o correctamente utilizando a especificação que forneci acima. Na documentação, é int.

 
comp:

Não, eu não pensava assim. Pensei que se o código compilado sem erros sob MT4, deveria também ser compilado sem erros sob MT5. Quando não o fez, comecei a cavar. Verifique o código no MT4 e no MT5 e certifique-se

Porquê?

MT4 e MT5 têm uma arquitectura intrinsecamente diferente

Ao traduzir a MQL4 da sintaxe antiga para a nova (o que se chama MQL4+) tivemos de olhar para a sintaxe antiga da MQL4 que tinha muitas coisas em falta, incluindo enumerações.

 

comp, vamos ser voluntários a ler apenas durante uma semana. Seja um leitor, não um escritor.

Tudo aquilo de que aqui fala foi discutido muitas vezes, não só neste fórum, mas também na MQL4.com.

 
Slawa:

Porquê?

MT4 e MT5 têm uma arquitectura diferente desde o início

Ao migrar a MQL4 da sintaxe antiga para a nova (o que se chama MQL4+) tivemos de olhar para a sintaxe anterior da MQL4 que tinha muitas coisas em falta, incluindo enumerações.

Pode-se argumentar durante muito tempo sem sucesso. O facto é que, se a documentação não fosse intrigante, mas como na dica ao digitar o nome da função, teria imediatamente encontrado a causa da repreensão do compilador (não era óbvio no exemplo com o modelo). Porque de acordo com a documentação, o código deveria ter sido compilado tal como está escrito e "pode". O que me impede de fazer corresponder a documentação e as pontas de ferramentas - não sei. Mas para o futuro lembrar-me-ei que em caso de mal entendido é melhor olhar para o que as pontas dos instrumentos mostram do que para a documentação.