Errori, bug, domande - pagina 2735

 
Ho una domanda: come posso trovare segnali gratuiti ora? Li trovo periodicamente manualmente, ma la pagina dei segnali mostra solo i segnali a pagamento. Il filtraggio per valore non mi permette di trovarli.
 
La ricompilazione di una libreria collegata all'Expert Advisor selezionato nel tester non la riprende all'esecuzione successiva. Devo selezionare un altro Expert Advisor nel tester, poi passare a quello precedente. Solo allora il tester prende la nuova libreria. Un bug completamente ovvio.
 
Stanislav Korotky:
La ricompilazione della libreria collegata all'Expert Advisor, selezionata nel tester, non porta al suo prelievo al prossimo avvio. Devo selezionare un altro Expert Advisor nel tester, poi passare a quello precedente. Solo allora il tester prende la nuova libreria. Un bug completamente ovvio.

È lo stesso nella versione stabile...

 
Bug MT5 (build 2407) errore di compilazione quando la classe contiene un puntatore a una classe wrapper che usa questa classe come 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);
} 
 
Un errore di compilazione:
int i = f(); //Error: 'f' - undeclared identifier
void OnStart()
{
}
int f() { return 0; }

ma per il resto:

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

bene. Che differenza fa?

 
A100:
È un errore di compilazione:

ma in questo modo:

Questo è il modo in cui dovreste scrivere il vostro primo esempio - con una descrizione in avanti, a proposito, una descrizione in avanti per strutture e classi funziona anche

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 è la differenza?

Penso che il compilatore analizzi il compilatore dall'alto verso il basso e alla fine, OnStart() sarà analizzato per ultimo
 
Igor Makanu:
Penso che il compilatore analizzi il compilatore dall'alto verso il basso e OnStart() sarà analizzato per ultimo

In questo caso, non c'è bisogno di pensare - le regole dovrebbero essere generali: se una funzione può essere applicata prima della dichiarazione, allora può, se no, allora non può. Di conseguenza, entrambi i casi devono o compilare o non compilare

 
A100:

In questo caso, non c'è bisogno di pensare - le regole dovrebbero essere generali: se una funzione può essere applicata prima della dichiarazione, allora può, se no, allora non può. Di conseguenza, entrambi i casi devono essere compilati o no.

ahimè, questa si chiama una caratteristica del linguaggio, si può scrivere in questo modo

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

Ahimè, queste si chiamano peculiarità della lingua, si può scrivere così.

Tutte le peculiarità si riflettono nella documentazione. Questo non l'ho visto lì. Da qui la conclusione: che non è una caratteristica, ma un difetto

 
A100:

In questo caso, non c'è bisogno di pensare - le regole dovrebbero essere generali: se una funzione può essere applicata prima della dichiarazione, allora può, se no, allora non può. Di conseguenza, entrambi i casi devono essere compilati o no.

Questo è il comportamento normale del C di tali linguaggi.

Senza una dichiarazione di funzione in avanti, non possono essere usati. Una chiamata da OnStart compila effettivamente in ritardo rispetto a una chiamata diretta a livello globale.

In C++, verrà generato lo stesso identico errore.

Motivazione: