template<typename T> void F(T)
{
class A
{
void f() { new A; } // 'A' - declaration without typevoid g() { A* a; } // 'A' - pointer to this function type is not supported yet
};
};
voidOnStart()
{
F(0);
}
E c'è anche qualcosa di sbagliato nella conversione dei puntatori.
Il seguente codice non si compila:
class A
{
};
class B : protected A
{
};
voidOnStart()
{
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++.
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.
Errore di compilazione:
Ecco un altro paio di errori:
E c'è anche qualcosa di sbagliato nella conversione dei puntatori.
Il seguente codice non si compila:
anche se qui la conversione è esplicita. Tutto funziona in C++.
E c'è anche qualcosa di incasinato nel portare i cartelli.
È giusto, il compilatore sta combattendo.
Andate a leggere su dynamic_cast, static_cast e reinterpret_cast e quando usarli correttamente e quando no.
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.