Errores, fallos, preguntas - página 1417

 

A100:

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


Tienes razón. Corto y claro, sin palabras innecesarias. He publicado un código que funciona.

Archivos adjuntos:
sort.mq5  3 kb
 
Stanislav Korotky:

Como resultado, dentro de este método typename define correctamente el tipo pasado, por ejemplo, como int, pero dentro del constructor B typename ya es igual a string.

El resultado de typename es siempre de tipo string, es decir, typename puede representarse convencionalmente como una función
string typename( X );
 
A100:
el resultado de typename es siempre de tipo string, es decir
No me refiero a eso. typename devuelve una cadena que contiene el nombre del tipo. Dentro de un método de la clase templada, la cadena con el tipo es "int", y dentro del constructor llamado desde allí, la cadena contiene "string".
 
Stanislav Korotky:
No me refiero a eso. typename devuelve una cadena con el nombre del tipo. Dentro del método de la clase templada, la cadena con el tipo es "int", y dentro del constructor llamado desde allí, la cadena 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 );
}
Resultado: int
 

El compilador no informa de un error si falta #endif

#property library
#ifndef  MACRO
#define  MACRO

Preferiblemente, debería, de lo contrario los errores difíciles de encontrar
 
A100:
Resultado: int.
Sí, este ejemplo mínimo funciona como debería, pero el código fuente más complejo no. Lo escribí en SD.
 
CoderMQ4:

Chicos, ¿se trata de un error del mercado o es completamente normal?


No lo he probado, pero no debería funcionar si está ligado al hardware y no al sistema operativo. Es como quitar el disco duro y ponerlo en otra placa base con otro vídeo. Comenzará a buscar nuevos conductores de inmediato.

¿O estoy entendiendo mal la máquina virtual?

 

Una llamada a una función virtual en una instancia de una clase derivada resulta en una llamada a esa función desde la clase base, no desde la clase derivada.

 
Ilya Malev:

Una llamada a una función virtual en una instancia de una clase derivada resulta en una llamada a esa función desde la clase base, no desde la clase derivada.

Este es siempre el caso en el constructor. ¿Por qué? -> google C++ (añade la palabra constructor a la cadena de consulta)
 
A100:
Siempre lo hacen en el constructor. ¿Por qué? -> google C++ (añade la palabra constructor a la cadena de consulta)

Gracias, no lo sabía) Sería bueno añadirlo en MQL5 Reference, ya sabes, donde se mencionan las funciones virtuales y los constructores. No es así en todos los idiomas.