Errori, bug, domande - pagina 127

 
xeon:
Il compilatore non rileva l'assenza del secondo segno uguale come un errore.

Non è necessario, il tuo codice non contiene un errore.

int a = 0;
if(a=1){Print("TEST");}

ed è identico a questo codice.

int a = 0;
a=1;
if(a){Print("TEST");}
 
xeon:
Il compilatore non rileva l'assenza di un secondo segno uguale come un errore.
for(int i=0;i<total_deal;i++)
        {
         //--- try to get deals ticket
         if(ticket=HistoryDealGetTicket(i)) // Предупреждение к этой строке
           {
            Deal.Ticket(ticket);

Ma dà un avvertimento, almeno per il mio codice come questo:

'DealInfo.mqh' DealInfo.mqh 1 1
l'espressione non è booleana Shou History.mq5 60 19
0 errore(i), 1 avviso(i) 1 1
 
Urain:

Non è necessario, il tuo codice non contiene un errore.

ed è identico a questo codice.


E invano, per esempio, lo studio rileva questo codice come un errore.

Inoltre, allora sembrerebbe che questo codice

int a = 0;
a=1;
if(a){Print("TEST");}

è identico a questo:

int a = 19;
if(a=14){Print("TEST");}

diciamo che 0 = falso, 1 = vero, allora a cosa corrispondono le altre cifre? 2,3,4, ...... :-)

Imho questo approccio non porta a nulla di buono, aggiunge solo inutili possibilità di guardare attraverso l'errore.

 
xeon:

Imho, questo approccio non serve a nulla, aggiunge solo un'opportunità in più per visualizzare l'errore.

La ragione per aggiungere un valore non booleano è che l'utente può vedere cosa sta facendo.

 

Se salvo il set nel terminale (sul grafico) e poi lo apro nel tester o nel terminale, tutto va bene. Ma se lo salvo nel tester e poi lo apro nel terminale, tutti i valori delle variabili di tipo non stringa vengono visualizzati in abracadabra. Se clicco su OK, allora quando riapro la finestra dei parametri, sarà tutto a posto, tutti i parametri saranno sostituiti correttamente con quelli nuovi, tranne quelli booleani. TUTTO ciò che è stato trovato diventa falsa... Nel tester, il set salvato dal tester si apre correttamente.

 

Scusate il fastidio, il bug di cui ho scritto prima non è ancora stato risolto. Quando si esegue l'indicatore dato nella descrizione della funzione CopySpread , la storia dello spread viene disegnata con un buco. Il buco copre sempre il periodo da quando il terminale parte a quando parte l'indicatore. Sembra che gli spread provenienti dal server ad ogni nuovo tick non siano registrati nella cronologia degli spread.Grazie!

 

Ricevo avvertimenti dal compilatore:

conversione enum implicita
possibile perdita di dati a causa della conversione del tipo

quando si usa questa stringa:

ENUM_POSITION_TYPE posType=PositionGetInteger(POSITION_TYPE);

Cosa c'è di sbagliato qui?

L'ho trovato: si dovrebbe usare un lungo

long posType=PositionGetInteger(POSITION_TYPE);

Poi un'altra domanda. Questa costruzione funzionerà correttamente

if(posType==POSITION_TYPE_BUY)

quando posType è definito come long?

 
ENUM_POSITION_TYPE posType=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
 
gpwr:

Ricevo avvertimenti dal compilatore:

conversione enum implicita
possibile perdita di dati a causa della conversione del tipo

quando si usa questa stringa:

Cosa c'è di sbagliato qui?

L'ho trovato: si dovrebbe usare un lungo

Poi un'altra domanda. Questa costruzione funzionerà correttamente

quando posType è definito come long?

funzionerà, è un avviso di conversione del tipo, potete ignorarlo
 
AlexinSergey:

Scusate il fastidio, il bug di cui ho scritto prima non è ancora stato risolto. Quando si esegue l'indicatore dato nella descrizione della funzione CopySpread , la storia dello spread viene disegnata con un buco. Il foro copre sempre il periodo da quando il terminale parte a quando parte l'indicatore. Sembra che gli spread provenienti dal server ad ogni nuovo tick non siano registrati nella cronologia degli spread.Grazie!

Grazie, ci occuperemo dell'esempio.
Motivazione: