Errori, bug, domande - pagina 2808

 
Errore nell'esecuzione
class A {};
class B : public A {
public:
template<typename T>
                void f( T )  { printf( "%d", 1 ); }
};
class C : public B {
public:
                void f( A* ) { printf( "%d", 2 ); }
};
void OnStart()
{
        C *c;
        B *b;
        c.f( b );
}

Il risultato in MQL: 1

In C++: 2

Per quanto mi ricordo il concetto originale di MQL è stato cambiato molto tempo fa e ora, come in C++, la classe base viene chiamata solo se non c'è una funzione adatta in una derivata. O forse hanno cambiato di nuovo tutto?

 
A100:

In MQL va bene:

ma C++ dà un errore in entrambi i casi

Cosa potrebbe essere un errore nel secondo caso? C'è al massimo un avvertimento (hint) che un puntatore è stato dichiarato ma non utilizzato.

 
Si prega di risolvere il bug osservato in tutte le nuove versioni

2020.07.26 10:54:28.285 PKFDC0:30019 genetic pass (94, 1154) testato con errore "OnInit returned non-zero code 1" in 0:00:00.110

2020.07.26 10:54:28.289 Tester expert file ....\MQL5\StochasticCCI.ex5 open error [2]

non c'è e non dovrebbe esserci.

l'errore è un agente di rete dopo l'aggiornamento, prima dell'aggiornamento funzionava bene, nelle vecchie versioni l'ottimizzatore non dà un errore nell'Expert Advisor, l'Expert Advisor non è stato ricompilato

la demolizione completa e la reinstallazione di Metatrader con la cancellazione di tutti i dati non ha avuto alcun effetto



 
Boris Egorov:
Si prega di risolvere il bug osservato in tutte le nuove versioni

2020.07.26 10:54:28.285 PKFDC0:30019 genetic pass (94, 1154) testato con errore "OnInit returned non-zero code 1" in 0:00:00.110

2020.07.26 10:54:28.289 Tester expert file ....\MQL5\StochasticCCI.ex5 open error [2]

non c'è e non dovrebbe esserci.

l'errore è un agente di rete dopo l'aggiornamento, prima dell'aggiornamento funzionava bene, nelle vecchie versioni l'ottimizzatore non dà un errore nell'Expert Advisor, l'Expert Advisor non è stato ricompilato

la demolizione completa e la reinstallazione di Metatrader con la cancellazione di tutti i dati non ha avuto alcun effetto



Mostrami il codice della tua chiamata all'indicatore, per favore.
 
Mihail Matkovskij:

Quale potrebbe essere l'errore nel secondo caso? C'è al massimo un avvertimento (hint) che il puntatore è stato dichiarato ma non è usato.

Questo perché non è

class B : public A {};
ci possono essere diversi dialetti, quindi vale la pena verificare con gli sviluppatori in ogni caso
 
MetaQuotes:
Mostrate il codice della vostra chiamata all'indicatore, per favore.

Nota il post, i consiglieri della gente hanno smesso di lavorare !!!!!!! https://www.mql5.com/ru/forum/347385/page5#comment_17519416

Новая версия платформы MetaTrader 5 build 2560: Улучшения во встроенной системе обучения
Новая версия платформы MetaTrader 5 build 2560: Улучшения во встроенной системе обучения
  • 2020.07.26
  • www.mql5.com
В пятницу 24 июля 2020 года будет выпущена обновленная версия платформы MetaTrader 5...
 

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

Bug, bug, domande

A100, 2020.07.26 01:02

Ho solo un errore in MQL:

class A {};
class B : A {};
class C : B {
                void f1( A* ) {}    //(1)нормально
                void f2() { A *a; } //(2)нормально
};

ma C++ ha un errore in entrambi i casi


Per favore, spiega perché c'è un problema con questo codice?

 
fxsaber:

Per favore, spiega perché c'è un problema in questo codice?

Non ne ho idea! Ho smontato questo esempio... Cambiato struct in classe - lashell C++ genera un errore:

errore: 'classe A A::A' è inaccessibile

Potete controllare voi stessi.

 

la risoluzione del contesto. il costruttore è inaccessibile attraverso l'antenato a causa dell'eredità privata.

Se si specifica esplicitamente il contesto, tutto si compila

                void f1( ::A* ) {}    //(1)нормально
                void f2() { ::A *a; } //(2)нормально

_____

Non chiedete perché è necessario un costruttore - non ne ho idea.

 
@A100, @TheXpert, Grazie.
Motivazione: