È lo stesso in Chrome. Non riesco a farmi vedere automaticamente queste icone blu/grigie. E il carattere in grassetto degli argomenti non letti è così impressionante che ne ho anche scritto.
Ho controllato e OrderCheck restituisce true. La sessione commerciale è aperta ecc. Ma MT5 avverte sia le richieste manuali che quelle automatiche allo stesso modo, dandomi retcode = 4. Perché c'è una situazione del genere, quando il terminale dice che tutto va bene, ma tu provi e non succede niente? Come faccio a sapere senza richieste che non si aprirà? E cos'è questo quarto codice di ritorno?
Sono l'unico che pensa che un codice come questo non dovrebbe essere compilato (dovrebbe esserci un errore di accesso ai membri privati)?
class cA;
class cB;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+class cA
{
//====================private:
//====================//===============//===============
cB *B;
//===============//===============void testfunc(void){::Print(__FUNCSIG__);}
//====================public:
//====================//===============//===============void test(void)
{
::Print(__FUNCSIG__);
if(::CheckPointer(::GetPointer(this.B))==POINTER_INVALID)return;
this.B.testfunc();// Здесь идет вызов private метода объекта B, что вроде как не должно быть возможным
}
//===============//===============void SetB(cB *const b){this.B=b;}
//===============//===============
};
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+class cB : public cA
{
};
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+intOnInit()
{
//---
cA A;
cB B;
A.SetB(&B);
A.test();
//---return(INIT_SUCCEEDED);
}
Sono l'unico che pensa che un codice come questo non dovrebbe essere compilato (dovrebbe esserci un errore di accesso ai membri privati)?
SD dice che va bene, può farlo...
Secondo le regole del MQL, un'istanza di una classe può accedere liberamente a campi e metodi privati di un'altra istanza se appartiene alla stessa classe della prima. Poiché cB è ereditato da cA, cB è cA e quindi cA può accedere a qualsiasi metodo e campo privato dell'istanza cB, indipendentemente da dove è dichiarata.
Secondo le regole del MQL, un'istanza di una classe può accedere liberamente ai campi e ai metodi privati di un'altra istanza se appartiene alla stessa classe della prima. Poiché cB è ereditato da cA, cB è cA e quindi cA può accedere a qualsiasi metodo e campo privato dell'istanza cB, non importa dove sia dichiarata.
Grazie. Non ho visto questo nella documentazione. Può indicarlo?
Andrey Barinov: Grazie. Non l'ho visto nella documentazione. Può indicarlo?
Non è nella documentazione, perché è una particolare "caratteristica" non documentata del linguaggio. È molto strano e controverso, ma è successo lo stesso.
Andrey Barinov: Grazie. Non ho incontrato questa funzione nella documentazione. Può indicarlo?
Questo è anche il caso del C++(e MQL è costruito a immagine e somiglianza del C++). Come si dice, la privacy in C++ è a livello di classe, non a livello di oggetto. Altrimenti non si potrebbe fare, per esempio, un copy-constructor senza metodi getter speciali per tutti i campi privati.
Cromo.
in FireFox ancora temi aggiornati in alto
E quelli blu a sinistra
È lo stesso in Chrome. Non riesco a farmi vedere automaticamente queste icone blu/grigie. E il carattere in grassetto degli argomenti non letti è così impressionante che ne ho anche scritto.
Un caso interessante sui conti AcePrime-Demo.
Avviamo l'Expert Advisor
E cerchiamo di aprire una posizione su qualsiasi bo-simbolo (opzioni binarie). Nel log del terminale otteniamo
'3182780': market sell 1.00 XAUUSDbo '3182780': failed market sell 1.00 XAUUSDbo [Invalid data]Nel registro dell'Expert Advisor otteniamo
Ho controllato e OrderCheck restituisce true. La sessione commerciale è aperta ecc. Ma MT5 avverte sia le richieste manuali che quelle automatiche allo stesso modo, dandomi retcode = 4. Perché c'è una situazione del genere, quando il terminale dice che tutto va bene, ma tu provi e non succede niente? Come faccio a sapere senza richieste che non si aprirà? E cos'è questo quarto codice di ritorno?
GetLastError() restituisce
ERR_TRADE_SEND_FAILED
4756
Fallito l'invio della richiesta di scambio
Riproduce tutto senza problemi.
Buon pomeriggio.
Sono l'unico che pensa che un codice come questo non dovrebbe essere compilato (dovrebbe esserci un errore di accesso ai membri privati)?
SD dice che va bene, può farlo...
Buon pomeriggio.
Sono l'unico che pensa che un codice come questo non dovrebbe essere compilato (dovrebbe esserci un errore di accesso ai membri privati)?
SD dice che va bene, può farlo...
Secondo le regole del MQL, un'istanza di una classe può accedere liberamente a campi e metodi privati di un'altra istanza se appartiene alla stessa classe della prima. Poiché cB è ereditato da cA, cB è cA e quindi cA può accedere a qualsiasi metodo e campo privato dell'istanza cB, indipendentemente da dove è dichiarata.
Secondo le regole del MQL, un'istanza di una classe può accedere liberamente ai campi e ai metodi privati di un'altra istanza se appartiene alla stessa classe della prima. Poiché cB è ereditato da cA, cB è cA e quindi cA può accedere a qualsiasi metodo e campo privato dell'istanza cB, non importa dove sia dichiarata.
Grazie. Non l'ho visto nella documentazione. Può indicarlo?
Grazie. Non ho incontrato questa funzione nella documentazione. Può indicarlo?
Questo è anche il caso del C++(e MQL è costruito a immagine e somiglianza del C++). Come si dice, la privacy in C++ è a livello di classe, non a livello di oggetto. Altrimenti non si potrebbe fare, per esempio, un copy-constructor senza metodi getter speciali per tutti i campi privati.
È lo stesso in C++