Erros, bugs, perguntas - página 1838

 

Isto é normal e absolutamente correcto. Pediu o tamanho interno (sem carga útil) de um objecto dinâmico.

Utilizar o ArraySize para objectos dinâmicos e aplicar o sizeof apenas a objectos estáticos. O tamanho é contado em tempo de compilação e é sempre uma constante.

 
Renat Fatkhullin:

Isto é normal e absolutamente correcto.

Utilizar o ArraySize para objectos dinâmicos e aplicar o sizeof apenas a objectos estáticos.

Obrigado! Por favor, traga a Ajuda para se conformar com esta recomendação.
 

Ler a documentação até ao fim

Вычисления размера происходит на этапе компиляции.

 

Estou a pedir ajuda, eu próprio estou perplexo. Escrevi este guião para explicar.

struct STRUCT 
{
  int a;
};

class CLASS
{
public:
  int a;
};

STRUCT f1()
{  
  static int i = 0;
  
  STRUCT Res;
  
  Res.a = i++;   
  
  return(Res);
}

CLASS* f2()
{
  static int i = 0;
  
  CLASS* Res = new CLASS;
  
  Res.a = i++;
  
  return(Res);
}

void OnStart()
{
  int i1 = f1().a + f1().a;  
  int i2 = f2().a + f2().a;
}

Há uma estrutura e há uma classe semelhante. Preciso, que após o cálculo i2, os objectos de classe correspondentes sejam removidos espontaneamente, como acontece com os objectos de estrutura, quando o mesmo cálculo i1 é efectuado. Como fazer isto?

 

fxsaber:

Como é que faço isto?

Embrulhe-o num ponteiro inteligente, não sei se pode ser feito com mql
 
Комбинатор:
Embrulhe-o num ponteiro inteligente, não sei se pode ser feito por mql
O problema em si é causado pela incapacidade de devolver uma estrutura complexa. Por exemplo, se no código acima em vez de int a; faça string a;, então f1() falhará no regresso. Foi por isso que os meus olhos caíram sobre as aulas, mas lá a armadilha descrita aguardava.
 

Geralmente, pode anular a cópia do construtor e o operador=

Isto não funcionará para as aulas, é suposto serem devolvidas apenas por ponteiro, as estruturas podem ser devolvidas por valor.

 
Комбинатор:

Em geral, pode anular a cópia do construtor e o operador=

Isto não funcionará para as aulas, é suposto serem devolvidas apenas por ponteiro, as estruturas podem ser devolvidas por valor.

Obrigado! Fui impedido desta solução por uma restrição recentemente removida. Agora funciona
struct STRUCT
{
  string Str;

  template <typename T>
  void operator =( const T Value )
  {
    Print(__FUNCTION__);
  }
  
  void operator =( const STRUCT &Struct )
  {
    this.Str = Struct.Str;
  }
};

STRUCT f()
{
  STRUCT Res;
  
  return(Res);
}

void OnStart()
{
  f() = 1;
}
 

Durante a optimização do Expert Advisor, recebo o seguinte erro

O (0, 3) testado com erro "erro crítico de tempo de execução 512 na função OnTimer (função sono chega ao fim do teste)" às 0:37:20.429 + sincronização do histórico 0:00:43.395

Passes de teste únicos sem erros.

Versão do MT5 e MetaEditor é 1571.

 
pivomoe:

Durante a optimização do Expert Advisor, recebo o seguinte erro

O erro "critical runtime error 512 na função OnTimer (função sleep chega ao fim do teste)" às 0:37:20.429 + sincronização do histórico 0:00:43.395

Remover a quantidade máxima de código do Expert Advisor, para que o erro seja reprodutível. E publicar o código restante.