Erros, bugs, perguntas - página 2735

 
Tenho uma pergunta, como posso encontrar sinais livres agora? Encontro-os periodicamente manualmente, mas a página de sinais apenas mostra sinais pagos. A filtragem por valor não me permite encontrá-los.
 
Recompilar uma biblioteca ligada ao Expert Advisor seleccionado no testador não a apanha na corrida seguinte. Tenho de seleccionar outro Expert Advisor no testador, depois mudo para o anterior. Só então o testador pega na nova biblioteca. Insecto completamente desobediente.
 
Stanislav Korotky:
A recompilação da biblioteca ligada ao Expert Advisor, que é seleccionada no testador, não resulta na sua recolha no próximo arranque. Tenho de seleccionar outro Expert Advisor no testador, depois mudo para o anterior. Só então o testador pega na nova biblioteca. Insecto completamente desobediente.

É a mesma coisa na versão estável...

 
Erro de compilação MT5 (build 2407) quando a classe contém um ponteiro para uma classe de invólucro que usa esta classe como um campo.
C++ online: https://onlinegdb.com/SJN1shM58
template<typename T>
class wrapper{
public:
   T data;
};

class B{
public:
   wrapper<B>* ptr;             // undefined class 'B' cannot be used
};


void OnStart(){  
   B b;
   b.ptr = new wrapper<B>();
   printf("%p", b.ptr);
} 
 
Um erro de compilação:
int i = f(); //Error: 'f' - undeclared identifier
void OnStart()
{
}
int f() { return 0; }

mas de resto:

void OnStart()
{
int i = f(); //нормально
}
int f() { return 0; }

muito bem. Que diferença é que isso faz?

 
A100:
É um erro de compilação:

mas desta forma:

é assim que deve escrever o seu primeiro exemplo - com uma descrição para o futuro, a propósito, uma descrição para o futuro das estruturas e classes também funciona

int f(int);
int i = f(5);
void OnStart()
{
   printf("i = %i", i);
}
//+------------------------------------------------------------------+
int f(int v)
{
   return v * v;
}
//+------------------------------------------------------------------+

2020.05.10 17:23:27.704 tst1 (ETHUSD,M1) i = 25

A100:

ok. Qual é a diferença?

Penso que o compilador analisa o compilador de cima para baixo e, no final, OnStart() será analisado por último
 
Igor Makanu:
Penso que o compilador analisa o compilador de cima para baixo e OnStart() será analisado por último

Neste caso, não há necessidade de pensar - as regras devem ser gerais: se uma função pode ser aplicada antes da declaração, então pode, se não, então não pode. Consequentemente, ambos os casos devem ou não compilar

 
A100:

Neste caso, não há necessidade de pensar - as regras devem ser gerais: se uma função pode ser aplicada antes da declaração, então pode, se não, então não pode. Consequentemente, ambos os casos devem ou não ser compilados.

infelizmente, a isto chama-se uma característica linguística, pode escrevê-la desta forma

int f(int v)
{
   return v * v;
}
void OnStart()
{
   printf("i = %i", i);
}
//+------------------------------------------------------------------+
int i = f(5);
 
Igor Makanu:

Infelizmente, estas são chamadas peculiaridades linguísticas, pode escrevê-las dessa forma.

Todas as peculiaridades estão reflectidas na Documentação. Ainda não vi este aqui. Daí a conclusão: que não se trata de uma característica, mas de uma falha

 
A100:

Neste caso, não há necessidade de pensar - as regras devem ser gerais: se uma função pode ser aplicada antes da declaração, então pode, se não, então não pode. Consequentemente, ambos os casos devem ou não ser compilados.

Este é o comportamento normal do C de tais línguas.

Sem uma declaração de função avançada, não podem ser utilizados. Uma chamada da OnStart na realidade compila com atraso em comparação com uma chamada directa a nível global.

Em C++, será gerado exactamente o mesmo erro.

Razão: