È un bug o mi sfugge qualcosa? Un normale EA parabolico piazza un ordine stop al punto precedente, in caso di acquisto con lo spread preso in considerazione. E ora il prezzo (Ask) ha raggiunto il prezzo dell'ordine 57781, ma l'ordine non è aperto.
class CLASS1
{
public:
int i;
};
class CLASS2 : public CLASS1 {};
voidOnStart()
{
CLASS2 Object;
CLASS1* Ptr = dynamic_cast<CLASS1*>(&Object);
Ptr.i = 1;
}
cioè la conversione in genitore, allora tutto va correttamente, apparentemente sono avvenuti cambiamenti molto significativi nella struttura del linguaggio e ora il tipo derivato non è inequivocabilmente un tipo antenato.
Controllato su C++:
class CLASS1
{
public:
int i;
};
class CLASS2 : public CLASS1 {};
voidOnStart()
{
CLASS1* Object = new CLASS1();
CLASS2* Ptr = (CLASS2 *)&Object;
Ptr->i = 1;
}
La preconversione di un oggetto di una classe madre in una derivata è gestita correttamente, cioè c'è un errore nel meccanismo di MQL5 con la conversione dei tipi, a meno che non sia stato progettato in quel modo.
cioè la conversione in genitore, allora tutto va correttamente, apparentemente un cambiamento molto significativo nella struttura del linguaggio ha avuto luogo e ora il tipo derivato non è inequivocabilmente un tipo antenato.
Il casting parentale ha sempre funzionato in MQL senza dynamic_cast - classicamente. Forse non capisco il significato di dynamic_cast. Forse non capisco il significato dell'esempio nella documentazione. Qualcuno potrebbe spiegare.
Ancora non capisco perché in MQL non si può lanciare un puntatore a un tipo di puntatore di classe discendente, ma in C++ è possibile, potete spiegare se è un bug in MQL o dovrebbe essere così?
È un bug o mi sfugge qualcosa? Un normale EA parabolico piazza un ordine stop al punto precedente, in caso di acquisto con lo spread preso in considerazione.
E ora il prezzo (Ask) ha raggiunto il prezzo dell'ordine 57781, ma l'ordine non è aperto.
Qual è l'errore di runtime
se fai questo:
cioè la conversione in genitore, allora tutto va correttamente, apparentemente sono avvenuti cambiamenti molto significativi nella struttura del linguaggio e ora il tipo derivato non è inequivocabilmente un tipo antenato.
Controllato su C++:
La preconversione di un oggetto di una classe madre in una derivata è gestita correttamente, cioè c'è un errore nel meccanismo di MQL5 con la conversione dei tipi, a meno che non sia stato progettato in quel modo.
Qual è l'errore di esecuzione
Se non controllate cosa restituisce dynamic_cast, non ha senso usarlo.
se fai questo:
cioè la conversione in genitore, allora tutto va correttamente, apparentemente un cambiamento molto significativo nella struttura del linguaggio ha avuto luogo e ora il tipo derivato non è inequivocabilmente un tipo antenato.
Se non controllate cosa restituisce dynamic_cast, non ha senso usarlo.
Grazie, nel mio esempio restituisce NULL. Perché succede questo?
Potresti fare un esempio pratico di come usare questo trucco?
Gli sviluppatori lo usano solo in Graphic.mqh come segue
Allo stesso tempo hanno definizioni di classi/oggetti come questa
Cioè, passano un puntatore genitore a un figlio. Beh, è esattamente quello che faccio nel mio esempio! Dov'è l'intoppo?
Un puntatore a una classe padre può effettivamente contenere un puntatore a un discendente.
Un puntatore a una classe padre può effettivamente contenere un puntatore a un discendente.
Grazie, ho capito!
Ancora non capisco perché in MQL non si può lanciare un puntatore a un tipo di puntatore di classe discendente, ma in C++ è possibile, potete spiegare se è un bug in MQL o dovrebbe essere così?
è possibile in C++, puoi spiegare se è un bug in MQL o dovrebbe esserlo?