Errori, bug, domande - pagina 2258

 
Anatoli Kazharski:

Dovete essere in grado di tracciare i cambiamenti nelle proprietà di tutti i grafici, non solo quello su cui si trova il programma MQL.

Fare una stampella attraverso un timer.

 
fxsaber:

Fare una stampella attraverso il timer.

Non voglio fare una stampella. Gli sviluppatori di MQ possono espandere le possibilità.

Forum sul trading, sistemi di trading automatico e test di strategia

Bug, bug, domande

Anatoli Kazharski, 2018.08.20 08:11

Voglio essere in grado di tracciare i cambiamenti nelle proprietà di tutti i grafici, non solo quello in cui si trova il programma MQL.

In questo momento l'eventoCHARTEVENT_CHART_CHANGE non contiene altri parametri:

Evento

Valore del parametro id

valore del parametro lparam

valore del parametro dparam

Valore del parametro sparam

L'evento di modifica delle dimensioni del grafico o di modifica delle proprietà del grafico tramite il dialogo delle proprietà

MODIFICA DEL GRAFICO DI UN EVENTO

-

-

-

//---

Per tracciare questo evento su altri grafici aperti, il monitoraggio potrebbe essere abilitato specificando l'ID del grafico desiderato.

Per esempio, così:

ChartSetInteger(chart_id,CHART_EVENT_CHART_CHANGE,true);
//---


Come lparam-parametro potrebbe essere l'identificatore del grafico su cui sono state fatte le modifiche. Il parametro sparam potrebbe essere il nome del simbolo.

 
A100:

Errore durante l'esecuzione:

Risultato: atteso:

A::f<int>:1 A::f<int>:1
A::f<int>:753790661 A::f<int>:2
A::f<int>:Errore:4007

Altrimenti:

Bene. Qual è la differenza? Perché la dimensione dell'array è diventata improvvisamente 753790660 (invece di uno) e di conseguenza la memoria è improvvisamente finita (4007)? MT5\1881\32

Inoltre... se si cancellano letteralmente tre caratteri nella classe nel primo caso, il risultato sarà anche ok

Grazie per il messaggio.

Fisso.


Per funzionare nella build corrente, non specificate scop di classe quando dichiarate i suoi metodi.


Le altre segnalazioni di bug sono collegate a questa e non saranno riprodotte dopo le correzioni.

 

l'esempio della guida non funziona:

https://www.mql5.com/ru/docs/basis/function/operationoverload

l'esempio in fondo alla pagina non funziona, dalle parole:

Другой пример перегрузки операции индексирования - работа с матрицами. Матрица представляет собою двумерный динамический массив, размеры массивов заранее неопределены. Поэтому нельзя объявить массив вида array[][] без указания размера второго измерения и затем передавать этот массив в качестве параметра. Выходом может служить специальный класс CMatrix, который содержит в себе массив объектов класса CRow.

il compilatore scrive:

oggetto di 'CMatrix' non può essere restituito, copia costruttore 'CMatrix::CMatrix(const CMatrix &)' non trovato tst.mq5 244 14

oggetto di 'CMatrix' non può essere restituito, copia costruttore 'CMatrix::CMatrix(const CMatrix &)' non trovato tst.mq5 261 11

oggetto di 'CMatrix' non può essere restituito, copia costruttore 'CMatrix::CMatrix(const CMatrix &)' non trovato tst.mq5 281 14

oggetto di 'CMatrix' non può essere restituito, copia costruttore 'CMatrix::CMatrix(const CMatrix &)' non trovato tst.mq5 303 11

4 errore(i), 0 avviso(i) 5 1




Документация по MQL5: Основы языка / Функции / Перегрузка операций
Документация по MQL5: Основы языка / Функции / Перегрузка операций
  • www.mql5.com
Перегрузка операций позволяет использовать операционную нотацию (запись в виде простых выражений) к сложным объектам - структурам и классам. Запись выражений с использованием перегруженных операций упрощает восприятие исходного кода, так как более сложная реализация сокрыта. Для примера рассмотрим широко применяемые в математике комплексные...
 

Errore di compilazione (ME\1881\32)

template<typename T>
class B;
template<typename T>
class A {
        B<int> *f() { return NULL; }
};
template<typename T>
class B : public A<T> {}; //Error: 'A' - struct undefined
void OnStart()
{
        A<int> *a;
        B<int> *b;
}

E così:

void OnStart()
{
        B<int> *b;
        A<int> *a;
}
bene. Che differenza fa?
 
fxsaber:

Non è questa la ragione.

questo aiuta molto quando si legge il codice e aiuta ad evitare errori in alcune situazioni.

Notate che questo in MQL non funziona ovunque:

class A { protected:
        int a;
};
class B : public A {
        int a;
        void f1() { this.a    = 0; } //нормально
        void f2() { this.A::a = 0; } //Error: '::' - syntax error
};

che in C++ si compila senza errori

 
A100:

Notate che questo in MQL non funziona ovunque:

che in C++ compila senza errori

Il C++ ha un talento per la perversione. Forse da qualche parte nelle macro questo potrebbe essere usato, ma non direttamente.

 
Nell'angolo in alto a destra continuo a vedere un'icona che dice che ho dei PM non letti. Non c'è modo di resettarlo - è letto. Si prega di aggiungere un pulsante "Fai leggere tutti".
 
fxsaber:

Potrebbe essere possibile usarlo da qualche parte nelle macro, ma non direttamente.

Le macro non c'entrano affatto - sostituite questo con un normale puntatore e avrete esattamente la stessa sintassi:

struct A {
        int x;
};
struct B : A {
        int x;
};
void OnStart()
{
        B b;
        b.A::x = 1; //Error: '::' - syntax error
}
In MQL non si può fare esplicitamente riferimento a b.A::x, mentre in C++ si può. Perché una tale restrizione?
 
A100:

Le macro non hanno niente a che fare con questo - sostituite questo con un puntatore ordinario e avrete esattamente la stessa sintassi:

In questo caso è giustificato. La variante con questo - non è chiaro perché scriverlo così. Quando A:: dice già tutto.