Errori, bug, domande - pagina 2420

 

Perché mql5 dovrebbe spostare la semantica? Non c'è bisogno di una tale ottimizzazione delle prestazioni, soprattutto perché è una macchina virtuale. Per cos'altro ti serve?).

Da solo, mql5 è molto diverso dal C++, così come dalC++98, e ancora di più dal C++11/14/17, ma le sue capacità ora coprono completamente le cose necessarie per creare un EA.

 
Andrey Pogoreltsev:

ma le sue capacità ora coprono completamente le cose necessarie per creare un EA.

Hanno coperto queste necessità anche 6 anni fa nel vecchio MQL4, se avete idea di quale fosse il livello del linguaggio in quei giorni. Abbiamo scritto EAs in esso, e alcuni ancora codificano in quello stile arcaico. Quindi tutto è relativo.

Per quale altro scopo sarebbe stato introdotto?)

Questo è stato discusso nelle ultime due pagine del thread.
 

Qui dà un errore:

void OnStart()
  {
   struct sA
     {
      int               ii[51];
     };
   struct sB
     {
      string            name;
      sA                distrib;
     };
   sB f;
  }
'distrib' - struct undefined    Test2.mq5       21      25

Non va così:

void OnStart()
  {
   struct sA
     {
      int               ii[51];
     };
   struct sB
     {
      //string            name;
      sA                distrib;
     };
   sB f;
  }

Anche questo non funziona:

struct sA
  {
   int               ii[51];
  };
struct sB
  {
   string            name;
   sA                distrib;
  };

void OnStart()
  {
   sB f;
  }

In allegato c'è uno script per riprodurre l'errore, uno script vuoto con un paio di righe di codice come sopra.

File:
Test2.mq5  1 kb
 

Beh, questo non ha affatto senso:

class A
  {
   class B
     {
      class C
        {
         class D
           {
            class E
              {
               bool              YES;
              };
           };
        };
     };
  };
void OnStart()
  {
   E g;
  }

La classe E non merita di essere così popolare.

Si compila senza errori.

 
È un errore del compilatore?
class A
{
private:
  int i;
};

class B : public A
{
public:  
  void f( int i ) {} // declaration of 'i' hides member declaration at line 4
};
 
fxsaber:
È un errore del compilatore?
Potrebbe essere il fastidioso chiacchiericcio di un formattatore di stronzate, che distrae dagli affari seri?
 
fxsaber:
È un errore del compilatore?
nei plus la stessa cosa
 
Vict:
Forse un fastidioso formichino che parla di stronzate, distraendoti dalle cose serie da fare?

quando sarai nel pieno del suo entusiasmo, me lo dirai allora?

 
fxsaber:
È un errore del compilatore?

È abbastanza logico.

Come possono essere privati i parametri di input in una funzione pubblica. Conflitto di interessi.

Se questo parametro privato deve essere usato all'interno di questa funzione, non ha bisogno di essere dichiarato come input, perché esiste già.

Se deve essere un'altra variabile, ovviamente ci sarà un conflitto di nome all'interno della funzione con la variabile privata esistente e quindi deve essere chiamata con un nome diverso.


ZS Si scopre che non importa se è pubblico o privato. È un banale conflitto di nomi. All'interno della funzione f ci sarà incertezza su cosa sia i - parametro di input o variabile globale della classe madre.

 
Nikolai Semko:

la domanda implica che non possiamo accedere al membro a causa della privacy, ma il conflitto di nomi è ancora mostrato dal compilatore.

come ho scritto, i plus si comportano esattamente allo stesso modo, cioè non c'è nessun errore nel compilatore e tutto va bene.