Errori, bug, domande - pagina 2471
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Spiega perché quando creo CChartObjectLabel non sto cancellando gli oggetti nell'indicatore quando deinizializzo in questo codice:
quando cambio TF ottengo la voce del diario: 2019.05.23 09:49:02.044 tstlabel EURUSD,M30: 2 oggetti di tipo CChartObjectLabel rimasti
se si decommenta in OnInit() la creazione di etichette di testo (CChartObjectLabel), allora tutto funzionerà correttamente
Passo un puntatore alla funzioneCreateLabel(), manon possocancellarlo dopo inOnDeinit()
Viene creato un nuovo oggetto l. E non viene cancellato.
logicamente
Ma lo scopo delle variabiliCChartObjectLabel *LabelUP,*LabelDN; è globale?
Quindi posso modificare la variabile in qualsiasi punto del codice?
Passo un puntatore alla funzione CreateLabel(), perché creo una nuova copia?
imho, non funziona correttamente.
HH: se creo oggetti in OnInit() e poi lavoro con loro in CreateLabel() (cioè, creo gli oggetti separatamente e lavoro con loro tramite puntatore), tutto funziona correttamente - ma non ricordo un caso in altri compilatori di passare un puntatore a una funzione per creare un nuovo oggetto - un puntatore, è un puntatore!
logicamente
ma il mio scopo è globale? - significa che posso modificare una variabile in qualsiasi parte del mio codice?
Passo un puntatore a CreateLabel(), perché ottengo una nuova copia?
Imho, non funziona correttamente.
logicamente
Ma lo scopo delle variabiliCChartObjectLabel *LabelUP,*LabelDN; è globale?
Quindi posso modificare la variabile in qualsiasi punto del codice?
Passo un puntatore alla funzione CreateLabel(), perché creo una nuova copia?
Imho, non funziona correttamente
Riassegnando un puntatore a un nuovo oggetto, si perde l'oggetto precedente, che era puntato dal puntatore riassegnato.
no, un puntatore è un puntatore, in MQL è un descrittore, non il punto - ma non è corretto creare una nuova copia dell'oggetto, questo funziona correttamente ora:
ma se seguite la vostra logica, allora questo codice creerà anche una copia dell'oggetto l nella funzione SetLabel() - ho passato un puntatore, non un riferimento?
nuovo dovrebbe essere rimosso. Gli oggetti esistono già e anche i puntatori ad essi.
la domanda non è come risolvere il problema, ma perché nell'ambito globale della variabileCChartObjectLabel *LabelUP,*LabelDN;- ha perso il puntatore!
no, un puntatore è un puntatore, in MQL è un descrittore, non il punto - ma non è corretto creare una nuova copia dell'oggetto, questo funziona correttamente ora:
ma se seguite la vostra logica, allora questo codice creerà anche una copia dell'oggetto l nella funzione SetLabel() - ho passato un puntatore, non un riferimento?
No. Qui l è il parametro del metodo attraverso il quale passiamo il puntatore necessario. Qui è tutto a posto. Il puntatore qui rimane sull'oggetto creato in precedenza. Qui non creiamo un nuovo oggetto e riassegniamo il puntatore ad esso con la perdita dell'oggetto precedente.
non funziona ancora correttamente
questi "puntatori" in MQL sono fatti per lavorare nell'ambito della classe, non voglio creare una classe, dichiaro un puntatore globale e poi lo passo a qualsiasi funzione, e il fatto che creo un descrittore dell'oggetto in questa funzione non è la ragione per distruggere l'oggetto all'uscita dall'ambito locale della funzione
Sono un po' occupato in questo momento, ma ho bisogno di fare esempi di test senza grafica - penso che la stessa cosa accadrà se si entra nella funzione con un puntatore con valore POINTER_INVALID, si uscirà con lo stesso POINTER_INVALID , per riferimento, tutto funzionerà correttamente, ma penso che non si possa passare un puntatore con POINTER_INVALID per riferimento - ci sarà un errore nell'accesso al puntatore
non funziona tutto correttamente comunque
questi "puntatori" in MQL sono fatti per lavorare nell'ambito della classe, non voglio creare una classe, mi basta forare e dichiarare un puntatore nell'ambito globale, poi passarlo a qualsiasi funzione e il fatto che creo un descrittore di oggetto in questa funzione non è la ragione per distruggere l'oggetto all'uscita dall'ambito locale della funzione
Penso che sarà lo stesso problema, se entrate con un valore POINTER_INVALID in questa funzione, uscirete con lo stesso valore POINTER_INVALID, per riferimento, tutto funzionerà correttamente, ma per riferimento non potete passare un puntatore con POINTER_INVALID - si verificherà un errore di accesso al puntatore.
Sono stato sorpreso di scoprire che era possibile dichiarare typedef con un puntatore a una funzione template.
Tuttavia, la felicità non durò a lungo.
Il typedef con un puntatore a una funzione template è una caratteristica prevista?
Quando si lavora con i typedef, usare una funzione template con specializzazione esplicita non genera codice per quel template