Errori, bug, domande - pagina 1417

 

A100:

virtual int Compare(const CObject *node,const int mode=0) const;


Hai ragione. Breve e chiaro, senza parole inutili. Ho pubblicato un codice funzionante.

File:
sort.mq5  3 kb
 
Stanislav Korotky:

Di conseguenza, all'interno di questo metodo typename definisce correttamente il tipo passato, ad esempio int, ma nel costruttore B typename è già uguale a stringa.

Il risultato di typename è sempre di tipo stringa, in altre parole typename può essere rappresentato convenzionalmente come una funzione
string typename( X );
 
A100:
il risultato di typename è sempre di tipo stringa, in altre parole
Non è quello che intendo. typename restituisce una stringa contenente il nome del tipo. All'interno di un metodo di una classe templata, la stringa con il tipo è "int", e all'interno del costruttore chiamato da lì, la stringa contiene "string".
 
Stanislav Korotky:
Non è quello che intendo. typename restituisce una stringa con il nome del tipo. All'interno del metodo della classe templata, la stringa con il tipo è "int", e nel costruttore chiamato da lì, la stringa contiene "string".
class A { public:
template<typename T>
        A( T ) { Print( typename( T )); }
};
class B { public:
template<typename T>
        void f( T t ) { A a( t ); } //вызываем A::A(...)
};
void OnStart()
{
        B b;
        int i = 0;
        b.f( i );
}
Risultato: int
 

Il compilatore non segnala un errore se manca #endif

#property library
#ifndef  MACRO
#define  MACRO

Preferibilmente, dovrebbe, altrimenti gli errori difficili da trovare
 
A100:
Risultato: int.
Sì, questo esempio minimo funziona come dovrebbe, ma il codice sorgente più complesso no. Scritto in SD.
 
CoderMQ4:

Ragazzi, è un bug del mercato o è completamente normale?


Non ho provato, ma non dovrebbe funzionare se è legato all'hardware e non al sistema operativo. È come togliere il disco rigido e metterlo su un'altra scheda madre con un video diverso. Inizierà subito a cercare nuovi piloti.

O sto fraintendendo la macchina virtuale?

 

Una chiamata a una funzione virtuale in un'istanza di una classe derivata risulta in una chiamata a quella funzione dalla classe base, non dalla classe derivata.

 
Ilya Malev:

Una chiamata a una funzione virtuale in un'istanza di una classe derivata risulta in una chiamata a quella funzione dalla classe base, non dalla classe derivata.

Questo è sempre il caso nel costruttore. Perché? -> google C++ (aggiungere la parola costruttore alla stringa della query)
 
A100:
Lo fanno sempre nel costruttore. Perché? -> google C++ (aggiungere la parola costruttore alla stringa della query)

Grazie, non lo sapevo) Sarebbe bene aggiungerlo in MQL5 Reference, sai, dove si parla di funzioni virtuali e costruttori. Non è così in tutte le lingue.