Errori, bug, domande - pagina 2520

 

E non c'è errore

Это_новая_форма_комментария;
void OnStart() {}
 

Errore durante la compilazione

void f() {} //Error: 'f' - function must have a body
void f();
void OnStart()
{
        f();
}

Altrimenti:

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

Va bene. Qual è la differenza?

Inoltre, C++ compila normalmente in un solo passaggio:

#ifdef __cplusplus
void f( int ) {}   //была функция
//...
void f( int = 1 ); //уточнили параметры по умолчанию
void OnStart()
{
        f();       //вызвали
}
#endif
 
E non c'è nessun errore di compilazione... Non resta che indovinare il risultato:
int f( int     ) { return 1; }
//...
int f( int = 2 );
int f( int     ) { return 3; }
void OnStart()
{
        Print( f( 0 ));
}
 

Avviso poco chiaro sulla compilazione

//lib.mqh //объявления
void f(); //Warning: no #import declaration
//lib.mq5 //реализация
void f() {}
//Test1.mq5 //собираем все вместе
#include "lib.mqh"
#include "lib.mq5"
void OnStart() { f(); }

Altrimenti:

//Test2.mq5
void f();
void f() {}
void OnStart() { f(); }

tutto va bene - non c'è nessun avvertimento. Che differenza fa?

 
A100:

Avviso poco chiaro durante la compilazione

//lib.mqh //объявления
int f(); //Warning: no #import declaration

//lib.mq5 //реализация
void f() {}
Un errore di battitura con il tipo int, presumo?
 
Alexey Navoykov:
È un errore di stampa con il tipo int, suppongo?

Sì... Corretto ovunque in void - per semplicità.

D'altra parte, il significato, ma già gli avvertimenti (*) non sono chiari

//lib.h //объявления
int g();  //Warning: no #import declaration //(*)
void f(); //Warning: no #import declaration
lib.h è un file di dichiarazione generale, mentre lib.mq5, lib2.mq5, lib3.mq5... con implementazioni, che sono incluse per mezzo di #include come necessario. Così, potrebbe non esserci alcuna implementazione di int g() in una particolare build, ma l'oscuro avvertimento è lì. In effetti, ce ne sono centinaia e ti impediscono di vedere gli avvisi veramente importanti
 
A100:

Sì... Corretto ovunque in void - per semplicità.

D'altra parte, il significato, ma già gli avvertimenti (*) non sono chiari

lib.h è un comune file con dichiarazioni, mentre lib.mq5, lib2.mq5, lib3.mq5... con implementazioni, che sono inserite tramite #include come necessario. Così, potrebbe non esserci alcuna implementazione di int g() in una particolare build, ma l'oscuro avvertimento è lì. In realtà ce ne sono centinaia, e ostacolano la visione di avvisi veramente importanti.

Notate che anche se specificate un'implementazione nello stesso libro di inclusione, anche questo avvertimento apparirà.

 

Il seguente errore merita particolare attenzione:

//lib1.mqh
void f(); //Error: 'f' - function must have a body
#include "lib.mq5"
//...
//lib2.mqh
void f();
#include "lib.mq5"
//...
//lib.mq5
void f() {}
#include "lib1.mqh"
#include "lib2.mqh"
void OnStart()
{
        f();
}

Essenzialmente simile a questo, ma con molti file, piuttosto poco ovvi e difficili da capire

 
Puoi dirmi come funziona C++ con questo?
struct A
{
  int i;
};

struct B : public A
{
  string Str;
};

void OnStart()
{
  A a = {0};
  B b;
  
  b = a; 
  a = b; // OK
}
Mi sto chiedendo se usare questa funzione nel mio codice o no. Se funziona in C++, lo userò. No, non credo, perché potrebbe essere cancellato nelle prossime build.
 
È un errore che non ci sia un avviso di inizializzazione?
struct A
{
  int i;
};

struct B : public A
{
  string Str;
};

void OnStart()
{
  A a;
  B b;
  
//  b = a; // possible use of uninitialized variable 'a'
  a = b; // OK
}