Erros, bugs, perguntas - página 1513

 

O que é melhor, de um ponto de vista de desempenho, como este:

  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(this.Chart, this.Name, id, Modifier, (double)Value);
    else if (sType == "string")
      ::ObjectSetString(this.Chart, this.Name, id, Modifier, (string)Value);
    else
      ::ObjectSetInteger(this.Chart, this.Name, id, Modifier, (long)Value);

    return;
  }

ou por métodos de sobrecarga?

 
zaskok3:

O que é melhor, de um ponto de vista de desempenho, como este:

ou por métodos de sobrecarga?

não verá qualquer diferença em termos de desempenho - ambas as soluções têm o seu lugar :)
 
coderex:
não verá uma diferença em termos de desempenho - ambas as soluções têm um lugar :)

Obrigado! Outra questão:

Qual é o objectivo dos campos constantes numa estrutura? Tais estruturas nem sequer podem ser passadas (juras de compilação ou transbordos de pilha)?

#property strict 

struct STRUCT
{
  const int Num;
  
  STRUCT( const int iNum = 0 ) : Num(iNum) // Если затереть " = 0", то будет ошибка компиляции: 'STRUCT' - wrong parameters count 
  {
  }
  
/*
// Так получается обойти ошибки компиляции, но на этапе выполнения: Stack overflow   
  STRUCT operator = ( STRUCT &Struct )
  {
    STRUCT Res(Struct.Num);
    
    return(Res);
  }
*/
};

const STRUCT GetStruct( const int Num = 0 )
{
  STRUCT Struct(Num);
  
  return(Struct); // 'return' - not allowed for objects with protected members or inheritance 
}

void OnStart( void )
{
  Print(GetStruct(1).Num);
  
  return;
}


Asobrecarga do operador de atribuição de estruturas é de facto impossível (faria sentido por causa da recorrência infinita). Então, porquê constar campos numa estrutura?

 
Karputov Vladimir:

No Windows 10 x64 nunca encontrou este erro no 1241 build. Após o comando "Desdobrar", a janela gráfica desdobra-se completamente, sem quaisquer buracos:

Provavelmente tem algumas configurações alteradas dentro do seu sistema operativo (talvez esteja a cortar as predefinições do seu sistema operativo ou a limpar o registo ou algo semelhante...).

Ao arrastar o copo com o rato, carregar em "Shift" ou "Ctrl" ou "Alt" neste ponto.

O meu melhor conselho é escrever ao ServiceDesk com descrição detalhada, com código próprio (que mostra carraças), com capturas de ecrã.

>> Provavelmente alterou algumas configurações dentro do seu sistema operativo (talvez esteja interessado em cortar características padrão do seu sistema operativo, ou limpeza do registo, etc...).

>> Não gosto dessas coisas, os sistemas são limpos

>> Aqui posso aconselhá-lo com uma descrição detalhada, com o seu código (que mostra os ticks), com screenshots para fazer uma aplicação ao ServiceDesk.

e onde fica isto? pensava que este ramo era uma serwer

 

Se eu usar #incluir para incluir um ficheiro mqh- que contenha algo semelhante no indicador:

int GetIndicatorBuffers( void )
{
  return(indicator_buffers); // 'indicator_buffers' - undeclared identifier
}

não há erro na fase de compilação do indicador. Mas ocorre com mqh separadamente (ver acima).

Como posso encontrar o valor deste indicador de propriedade no MT4, para que o compilador não se queixe mais do que uma vez em mqh ligado?

 

Estou a tentar assegurar que a aplicação funciona em MQL5 e MQL4 de forma idêntica.

Suspeito que ao introduzir variáveis sinput em MQL4, esqueceram-se de adicionar as funçõesParameterSetRange() eParameterGetRange() à língua.

Eles aparecem na documentação MQL4 comoParameterSetRange() eParameterGetInput()-https://docs.mql4.com/basis/variables/inputvariables#sinput

mas o compilador não os aceita.

Infelizmente, sem estas funções, perde-se toda a diversão das variáveis de sinput.

Input Variables - MQL4 Documentation
Input Variables - MQL4 Documentation
  • docs.mql4.com
Input Variables - MQL4 Documentation - MQL4 Documentation
 
zaskok3:

Obrigado! Outra questão:

Qual é o objectivo dos campos constantes numa estrutura? Tais estruturas nem sequer podem ser passadas (juras de compilação ou transbordos de pilha)?


Asobrecarga do operador de atribuição de estruturas é virtualmente impossível (faria sentido por causa da recorrência infinita). Então, porquê constar campos numa estrutura?

Desfrute:

#property strict

struct STRUCT
{
  const int Num;
  
  STRUCT( const int iNum  ) : Num( iNum )
  {
  }
  
  STRUCT( const STRUCT& Struct ) : Num( Struct.Num )
  {
  }
};

const STRUCT GetStruct( const int Num = 0 )
{
  STRUCT Struct( Num );
  return Struct;
}
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   Print( GetStruct(1).Num );
}
//+------------------------------------------------------------------+
 
Koldun Zloy:

Desfrute:

É bom ir directo ao assunto, obrigado! Ainda me pergunto porque é que eu próprio não descobri antes de sobrecarregar o construtor, mas fui para o operador da obra. Afinal de contas, a solução é óbvia!
 

Movido a pasta do terminal MT4 para outra unidade. Anteriormente, eu executava-o com a chave portátil. Desta vez, fiz a mesma coisa.

O terminal ligado ao servidor de uma só vez. No passado, quando movia uma pasta terminal, as palavras-passe não eram guardadas - tinha de as voltar a introduzir. Agora (construir 950) isso não acontece.

Isto é normal (e só para mim)?

 
zaskok3:

Que melhor maneira, do ponto de vista do desempenho, é esta:

Sobrecarga, claro.
Razão: