Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1098

 
Grigori.S.B:

Per favore ditemi perché il compilatore genera un avvertimento nel seguente codice dello script di test MQL4:

Un avvertimento alla linea 27 su una mancata corrispondenza del tipo di dati. Entrambe le variabili hanno lo stesso tipo int. Qui sotto c'è uno screenshot della compilazione dello script.

Se sostituisco la linea 27 con

l'avvertimento non appare.

Qual è il trucco?

Non c'è nessun trucco. La variabile t è dichiarata come doppio

In effetti, questa t non ha senso da nessuna parte.

 
Alexey Viktorov:

E non c'è nessun trucco. La variabile t è dichiarata come doppio

Grazie mille, sto lavorando molto - è ora di riposare.

Alexey Viktorov:

In effetti, questa t non porta alcun valore da nessuna parte.

È una variabile buffer usata per memorizzare temporaneamente il risultato durante l'ordinamento.

 

Come sono diversi questi metodi di inizializzazione?

class Klas{};
Klas *Klas_
Klas Klas_
 
Seric29:
1. class Klas{};
2. Klas *Klas_
3. Klas Klas_

1. tipo (classe) descrizione

2. dichiarazione di tipo (classe) puntatore

3. dichiarazione dell'istanza della classe - questa è l'inizializzazione, perché il costruttore Klas() sarà chiamato se non è descritto, allora sarà chiamato il costruttore di default - aiuto

Seric29:

Come sono diversi questi metodi di inizializzazione?

cioè l'inizializzazione solo passo 3.

 
Igor Makanu:

1. tipo (classe) descrizione

2. dichiarazione di tipo (classe) puntatore

3. dichiarazione dell'istanza della classe - questa è l'inizializzazione, perché il costruttore Klas() sarà chiamato se non è descritto, allora sarà chiamato il costruttore di default - aiuto

cioè solo la clausola 3 è inizializzata.

Non ho visto come inizializzarli nell'aiuto, forse l'ho solo guardato e non ho capito, dato che le classi sono mal descritte nell'aiuto - l'ho letto 30 volte.

Sì, in effetti dopo la classe come non ho voci ma hanno messo questo codice in OnStart

   CFoo foo1(TimeCurrent());     // явный вызов параметрического конструктора 
   CFoo foo2();                  // явный вызов параметрического конструктора с параметром по умолчанию 
   CFoo foo3=D'2009.09.09';      // неявный вызов параметрического конструктора 
   CFoo foo40(foo1);             // явный вызов конструктора копирования 
   CFoo foo41=foo1;              // неявный вызов конструктора копирования 
   CFoo foo5;                    // явный вызов конструктора по умолчанию (если конструктор по умолчанию отсутствует, 
                                 // то вызывается параметрический конструктор с параметром по умолчанию) 
//--- допустимые варианты получения указателей CFoo 
   CFoo *pfoo6=new CFoo();       // динамическое создание объекта и получение указателя на него 
   CFoo *pfoo7=new CFoo(TimeCurrent());// ещё один вариант динамического создания объекта 
   CFoo *pfoo8=GetPointer(foo1); // теперь pfoo8 указывает на объект foo1 

Comprendetelo come volete. Non so perché devi spiegarlo in questo modo.

CFoo *pfoo6=new CFoo();       // динамическое создание объекта и получение указателя на него

Non capisco perché ho bisogno di questo puntatore.

CFoo *pfoo7=new CFoo(TimeCurrent());// ещё один вариант динамического создания объекта 

E questo a cosa serve? A quello che vuoi e a quello che pensi che significhi.

CFoo foo3=D'2009.09.09';      // неявный вызов параметрического конструктора

Inoltre non capisco cosa significhi questo.

CFoo foo40(foo1);             // явный вызов конструктора копирования 
Anche questo non è chiaro a cosa serva. Non l'avrebbero caricato, ma avrebbero scritto l'idea normalmente e semplicemente.
 

Saluti.

Potreste dirmi come vengono calcolati i livelli orizzontali per la griglia in mt4 e in mt5?

 
Seric29:

E perché inizializzare tramite puntatore, non ho visto per niente nell'aiuto come inizializzarli, forse ho guardato e non ho capito, perché le classi sono mal descritte nell'aiuto letto 30 volte.

un puntatore è un puntatore, l'inizializzazione è l'inizializzazione

capire prima questo codice:

1. int a;
2. int a = 5;

Cos'è l'inizializzazione in questo codice e cos'è una dichiarazione di variabile?

Quando viene allocata la memoria?

e poi trattare l'argomento OOP e i puntatori a una classe e i puntatori a un oggetto con questa conoscenza.


vai via, per qualche motivo non posso rispondere a domande elementari

 
Igor Makanu:

un puntatore è un puntatore, un'inizializzazione è un'inizializzazione

capire prima questo codice:

cosa in questo codice è l'inizializzazione e cosa è la dichiarazione di variabile?

Quando viene allocata la memoria?

e poi usare questa conoscenza per discutere l'OOP e i puntatori a una classe e i puntatori a un oggetto.


andato, per qualche motivo non posso rispondere a domande elementari.

Ecco un esempio semplice e chiaro. La 1a variante è la dichiarazione della variabile e l'allocazione della memoria (la variabile memorizza un valore arbitrario predefinito o un numero di settore o un indirizzo in C++ qui non lo so), la 2a variante è l'inizializzazione.

E a cosa servono questi puntatori di Tipo e con cosa mangiarli avrebbero dovuto essere spiegati normalmente.

Puntatori a una classe e puntatori a un oggetto

Dovrei anche aver capito cosa sono. Lo cercherò in rete e vedrò se c'è qualcosa.

 
Andrey Sokolov:

Saluti.

Come si calcolano i livelli orizzontali per una griglia in mt4 e in mt5?

Se vuoi rilevare un livello orizzontale, devi prima determinare il prezzo massimo aperto e poi aggiungere un certo valore e ottenere un nuovo prezzo che ti permette di osservare quando il prezzo rompe questa condizione di livello e piazzare un nuovo ordine o piazzare una griglia di ordini pendenti tenendo conto del numero massimo di ordini e poi visualizzare questa griglia.


lì, in generale, qualsiasi codice compatto è più facile da visualizzare e modificare per i propri compiti


Non so se l'hai provato e non ho mai provato molti programmi e penso che sia più difficile da usare in TS semplici, ma forse non l'hai mai provato.

 
Seric29:

Ecco un esempio semplice e chiaro. La prima opzione è la dichiarazione della variabile e l'allocazione della memoria (la variabile memorizza il valore arbitrario di default o il numero di settore o l'indirizzo in C++ qui non lo so), la seconda opzione è l'inizializzazione.

E perché queste indicazioni di Tipo e con cosa mangiarle avrebbero dovuto essere spiegate adeguatamente.

l'allocazione della memoria sarà nell'esempio 1 e nell'esempio 2

l'esempio 2 è una dichiarazione e un'inizializzazione, l'esempio 1 è solo una dichiarazione

la classe è la stessa, la classe è un tipo definito dall'utente che contiene campi (proprietà) e metodi per lavorare con questi campi

un puntatore a una classe è una dichiarazione, ma senza inizializzazione e senza allocazione di memoria per il tipo (classe)

puntatore = new MyClass(); - questa è una dichiarazione e inizializzazione, che crea una nuova istanza della classe e questa istanza sarà restituita come un collegamento a un oggetto (non esattamente un collegamento, in MQL non è ... importante e quindi ci si confonde)

....

se non vuoi leggerlo, almeno usa questo mio post per modificare il tuo esempio:

CFoo *pfoo6=new CFoo();

a

CFoo *pfoo6;
pfoo6 = new CFoo();
CFoo *pfoo_7 =  pfoo6;

e cercare di capire cosa succede - quando si assegna l'ultima linea a..... ma si legge ancora, solo chiedendo sui forum non è un'opzione