Errori, bug, domande - pagina 49

 

Perché il compilatore non vede la differenza tra int e color.

   void              CreateLabel(int x,int y,color COLOR);   
   void              CreateLabel(int x,int y,int n);

Ridefinisco una funzione, mi rimprovera (dice che sto attento a confondere i pedali).

'CreateLabel' - ambiguous call to overloaded function with the same parameters
Se solo ci fossero parametri predefiniti, ma non ci sono ambiguità, basta definire il tipo del parametro passato e andare avanti.
 
Urain:

Perché il compilatore non vede la differenza tra int e color.

Io sovrascrivo una funzione, lui giura (dice attento a confondere i pedali).

Se solo ci fossero parametri predefiniti, ma non ci sono ambiguità, basta definire il tipo del parametro passato e via.
In questo caso, il compilatore si sta lamentando che avete creato due funzioni con lo stesso nome, e i parametri passati non hanno nulla a che fare con questo.
 
sergey1294:
In questo caso, il compilatore si lamenta che avete creato due funzioni con lo stesso nome, e i parametri che passate non hanno niente a che fare con questo.

In questo caso, leggete cosa significa la parola "sovraccarico".

SZ così come il"sovraccarico di funzioni".

Документация по MQL5: Основы языка / Функции / Перегрузка функций
Документация по MQL5: Основы языка / Функции / Перегрузка функций
  • www.mql5.com
Основы языка / Функции / Перегрузка функций - Документация по MQL5
 
Urain:

Una domanda alla fraternità di scrittura, non un errore o un bug, ma una domanda che può suggerire cosa...

Voglio ottenere il nome del puntatore all'interno della classe ma non funziona.

In generale, l'essenza della questione è che voglio che il nomedella stringadell'oggetto grafico sia assegnato automaticamente.

Voglio ottenere automaticamente un nome di stringa per esso.

Quando si installa un oggetto grafico dal metodo della classe, il nome dovrebbe essere assegnato automaticamente a seconda del cursore.

Non so ancora come fare, penso che possiamo farlo da zero.


In teoria, ci sono due modi principali per nominare automaticamente un oggetto (con varie variazioni sul tema, quando lo si implementa):

1. La generazione del nome si basa su un elenco numerato

Una classe separata fa la denominazione dell'oggetto, e mantiene i "numeratori" (che possono essere o per tutti gli oggetti o per un gruppo specifico di oggetti).

In questo caso, il nome è formato sulla base di (preferibilmente): tipo di oggetto, nome del simbolo (coppia di valute), notazione testuale di TF e numero di serie dell'oggetto (preso dal numeratore).

In questo caso, a seconda dell'implementazione, si può tracciare la presenza dell'oggetto sul grafico, e non si può.

2. Il nome è formato sulla base della data e dell'ora di creazione dell'oggetto.

Il nome sotto questo approccio può essere formato sulla base di: tipo di oggetto, nome del simbolo, notazione di testo TF e chiave (formata sulla base di data e ora).

PS

Nella prima variante (secondo me) sarebbe più ragionevole implementare in classe e ciclo completo di gestione degli oggetti (creazione, modifica e cancellazione)...

 
Urain:

In questo caso, leggete cosa significa "sovraccarico".

ZS Bene come"sovraccarico di funzioni".

Non sapevo che fosse possibile.
 
sergey1294:
Non sapevo che questo fosse possibile.

Il polimorfismo e il sovraccarico di funzioni sono principi di base dell'OOP che dovrebbero essere presenti in ogni linguaggio che si rispetti.

Polimorfismo

Il polimorfismo è un fenomeno quando una funzione (metodo) con lo stesso nome corrisponde a un codice di programma diverso (codice polimorfico) a seconda di quale oggetto di classe viene utilizzato per chiamare il metodo. Il polimorfismo è assicurato cambiando l'implementazione del metodo della classe antenata nella classe discendente con la conservazione obbligatoria della firma del metodo. Questo assicura che l'interfaccia della classe madre sia conservata invariata e permette il collegamento di un nome di metodo nel codice con classi diverse - il metodo con il nome dato è preso dall'oggetto della classe da cui viene fatta la chiamata. Questo meccanismo è chiamato binding dinamico (o tardivo) - in contrasto con il binding statico (precoce), che è fatto al momento della compilazione.

Sovraccarico di funzioni

Sovraccarico di procedure e funzioni - la capacità di usare le subroutine con lo stesso nome: procedure o funzioni nei linguaggi di programmazione.


Esempio dalla libreria standard di classi commerciali, classe CAccountInfo:

double MarginCheck(const string symbol,ENUM_POSITION_TYPE trade_operation,double volume) const;
double MarginCheck(const string symbol,ENUM_ORDER_TYPE trade_operation,double volume) const;
 
ddd06:

Ho passato molto tempo a parlare con la rispettata MetaQuotes e a dimostrare loro che avevano un glitch, e mi hanno detto che non c'era nessun glitch.

Tuttavia, ho mantenuto la mia posizione e mi hanno consigliato di chiedere alla comunità.

Quindi, abbiamo un indicatore e un Expert Advisor che prende i valori dell'indicatore.

Avvia il tester su EURUSD dal 01.07.2010 al 02.07.2010 su М1

Guardiamo il log e vediamo che i valori di un buffer cambiano, e l'altro no.

Questo dura un'ora e poi il secondo buffer è vivo, ma se guardate i valori dell'indicatore non coincidono.

Ho anche provato a cambiare l'account e a rifare la cronologia, ma non è servito.

Ecco un link al mio terminale in rar 90mbhttp://dl.dropbox.com/u/6290215/MetaTrader%205%201111.rar, tutto è impostato lì

E l'indicatore con il consigliere nell'allegato

Hai inviato un codice con un errore. Naturalmente, è il vostro codice che dà l'informazione sbagliata. Avete ignorato le nostre osservazioni sulla correzione dell'errore, offrendo ogni volta un nuovo codice e ogni volta con un errore.
 
Urain:

Perché il compilatore non vede la differenza tra int e color.

Io sovrascrivo una funzione, lui giura (dice attento a confondere i pedali).

OK, ci sarebbero dei parametri predefiniti, ma non ci sono ambiguità, basta definire il tipo del parametro passato e andare avanti.
C'è davvero un problema - lo esamineremo.
 
Urain, grazie per il tuo messaggio. L'errore è stato corretto.
 
stringo:
Avete fornito il codice con un errore. Naturalmente, questo è il vostro codice che dà informazioni sbagliate. Allo stesso tempo, avete ignorato i nostri commenti sulla correzione degli errori, offrendo ogni volta un nuovo codice e ogni volta con un errore.

Tuttavia, se mi aveste detto che non ci dovrebbe essere sincronizzazione e dovremmo costruirla nel codice...

Invece hai detto ostinatamente che tutto corrisponde.

ma TimeToString(time[0],TIME_DATE|TIME_MINUTES)," buf1-",buf1[1]," buf2-",buf2[1]) invece di TimeToString(time[1],TIME_DATE|TIME_MINUTES)," buf1-",buf1[1]," buf2-",buf2[1]);

questo è certamente un errore, ma non ha influenzato il punto.

Rimanderò l'aggiunta del nuovo indicatore per verificare quanto mi sbagliavo.

Cioè, stavi dicendo che tutto coincide e che hai corretto il codice dell'Expert Advisor. Ma di fatto, nulla coincide e dovremmo sistemare il codice dell'indicatore (per integrarvi la sincronizzazione).