Errori, bug, domande - pagina 1662

 
fxsaber:

Perché l'avvertimento è alla pari?

Non c'è sovraccarico di questa funzione con uchar. C'è solo char. Ecco perché avvisa che la costante è più grande di 127.
 
Sergei Vladimirov:
Non c'è sovraccarico di questa funzione con uchar. C'è solo char. Ecco perché avvisa se la costante è più grande di 127.
Perché questo errore non si verifica affatto? Perché non c'è sovraccarico per gli array uchar (se l'aiuto non mente).
 
Alexey Viktorov:

Se mostra valori simili alla verità, ma conta su dati sbagliati, risulta che il problema è in mql5 e non nel tester o nel visualizzatore.

In generale, grazie per la vostra partecipazione, combatterò il problema a lungo termine. E oggi controllerà un'altra sezione simile di valuta. Forse è il problema delle zecche in quel luogo, hhz?

Controllato. Tutto conta bene. A quanto pare c'è un bug nella generazione di zecche in un punto particolare della storia.
 
fxsaber:
Allora perché non c'è nessun errore? Non c'è sovraccarico per gli array uchar (se l'aiuto è corretto).
Ora questa è una domanda valida.
 
fxsaber:
Allora perché non c'è nessun errore? Perché non c'è sovraccarico per gli array uchar (se la guida è corretta).
Apparentemente perché gli array sono identici. La differenza tra char e uchar è solo nell'interpretazione da parte del compilatore. In realtà non ci dovrebbe essere nessun avvertimento neanche lì, perché nulla è effettivamente troncato, si può verificare.
 
Alexey Navoykov:
Apparentemente perché gli array sono identici. La differenza tra char e uchar è solo nell'interpretazione del compilatore. In realtà non ci dovrebbe essere alcun avvertimento, perché nulla è effettivamente troncato, puoi vedere tu stesso.
Lì viene copiato byte per byte. Quindi con tutti i firmati <-> non firmati.
 
A100:

Ma questo (e quelli precedenti con typedef) sono errori incidentali - non ho ancora trovato quello principale, perché non c'è nessun typedef con la stessa firma nel programma sorgente (come in questo esempio).

Sono riuscito a fare uno script di prova vicino al programma sorgente con un errore durante l'esecuzione

//Script1.mq5
typedef int (*GTW)( uint, uint, int );
#import "Script2.ex5"
        void f( GTW );
#import "Script3.ex5"
        int g( uint, uint, int );
#import
void OnStart() { f( g ); }
//Script2.mq5
#property library
typedef int (*GTW)( uint, uint, int );
void f( GTW ff ) export { ff( 0x1, 0x1, 0 ); }
//Script3.mq5
#property library
int g( uint, uint, int ) export
{
        Print( __FUNCSIG__ );
        return 0;
}

Risultato: chiamata di puntatore a funzione non valida in 'Script2.mq5

E ora il trucco... - Sostituite GTW in tutti i file con GT e controllate il risultato!

 

Per favore consigliate la sintassi, come riscrivere correttamente una funzione come questa

MqlTick Func()
{
  MqlTick Tick = {0};
  
  return(Tick);
}

a qualcosa come

MqlTick Func()
{
  return(MqlTick(0));
}

o qualcosa del genere

MqlTick Func()
{
  return(new MqlTick);
}

Cioè non scrivere una parte separata creando la struttura da restituire.

 

Recentemente (da circa un mese) nelle discussioni sui progetti di servizio 'Lavoro', dopo aver scritto un casino di testo con citazioni e illustrazioni, dopo aver inviato il tutto va in ... buco #403


No, reinviare il modulo non aiuta - dopo aver ricaricato la pagina devo digitare di nuovo tutto

Caro editore, puoi spiegare quale nuova rivoluzione è stata inventata a beneficio degli utenti, e come uscirne?
 
Alexander Puzanov:

Recentemente (da circa un mese) nelle discussioni sui progetti di servizio 'Lavoro', dopo aver scritto un casino di testo con citazioni e illustrazioni, dopo aver inviato il tutto va in ... buco #403


No, reinviare il modulo non aiuta - dopo aver ricaricato la pagina devo digitare di nuovo tutto

Caro editore, puoi spiegare quale nuova rivoluzione è stata inventata a beneficio degli utenti, e come uscirne?
Nell'angolo in alto a sinistra dell'editor, premi SEMPRE il pulsante HTML, poi CTRL+A e CTRL+C prima di inviare un grande post. In questo modo tutto rimane nel buffer. E se si verifica un errore. Dovrete usare di nuovo il pulsante HTML, e poi CTRL+A e CTRL+V. Risparmierà un sacco di stress.