Errori, bug, domande - pagina 1615

 
Ciao a tutti. C'è un modo per effettuare nuovamente l'accesso a un conto quando la connessione al server MT5 viene interrotta?
 

Errore di compilazione:

class A
{ 
};

template<typename T>  void func(T *const &a[])  { } 


void OnStart()
  {
    A *const a[] = { NULL };
    func(a);      //  'a' - cannot convert from const pointer to nonconst pointer
  }
 

Ecco un altro paio di errori:

template<typename T> void F(T)
{
  class A
  {
    void f()  { new A; }  // 'A' - declaration without type
        
    void g()  { A* a; }   // 'A' - pointer to this function type is not supported yet
  };
};


void OnStart()
  {
    F(0);
  }
 

E c'è anche qualcosa di sbagliato nella conversione dei puntatori.

Il seguente codice non si compila:

class A
{
};

class B : protected A
{
};

void OnStart()
  {
    A* a;
    B* b= (B*)a;  // conversion from 'B *' to 'A *' is not accessible because of inheritance access
  }

anche se qui la conversione è esplicita. Tutto funziona in C++.

 
Alexey Navoykov:

E c'è anche qualcosa di incasinato nel portare i cartelli.

Esatto, il compilatore giura.
 
Комбинатор:
È giusto, il compilatore sta combattendo.
Aprire C++ e controllare come dovrebbe essere.
 
Alexey Navoykov:
Andate a leggere su dynamic_cast, static_cast e reinterpret_cast e quando usarli correttamente e quando no.
 
Комбинатор:
Andate a leggere su dynamic_cast, static_cast e reinterpret_cast e quando usarli correttamente e quando no.
Evitiamo inutili ingolfamenti e filosofie, ok? Stiamo parlando di un costrutto specifico che dovrebbe compilare.
 
Alexey Navoykov:

C++ converte questo codice in reinterpret_cast e MQL in dynamic_cast. E per quanto ho capito, questo è esattamente il caso in cui il compilatore può trovare l'errore dynamiccast durante la compilazione.

reinterpret_cast è illegittimo in questo caso, quindi il fatto che questo codice compili in C++ non è un argomento.

 
Комбинатор:

C++ converte questo codice in reinterpret_cast e MQL in dynamic_cast. E per quanto ho capito, questo è esattamente il caso in cui il compilatore può trovare un errore dynamiccast durante la compilazione.

Reinterpret_cast è illegittimo in questo caso, quindi il fatto che questo codice compili in C++ non è un argomento.

Aspetta, perché confondi le cose? Cosa c'entra il cast dinamico? I compiti del compilatore non includono giocare a Sherlock Holmes e cercare qualcosa nella logica del programma. Esegue solo un controllo formale della conformità allo standard del linguaggio, niente di più. E tutto è corretto dal punto di vista dello standard.

Se avessi guardato attentamente il mio esempio, avresti visto che il problema era legato a protected. Se lo cambi in public, tutto è ok. L'oggetto stesso non viene cambiato a causa di questo, cioè il compilatore MQL ha solo una restrizione non necessaria, tutto qui.

Quindi non speculare e cercare un significato segreto dove non c'è, che è solo un banale errore del compilatore.

Motivazione: