Errores, fallos, preguntas - página 2200

 

¿Qué significa esto?

2018.04.24 14:02:21.721 Books   invalid book item[Si-6.18,buy,61996.00000,-50]
 
fxsaber:
¿Por qué el script no produce nada?
porque se trata de una transferencia de punteros y no de valores
 
Комбинатор:
porque es por referencia y no por valor

No lo entiendo en absoluto. Este es el código

class A
{
public:
  template <typename T>
  void operator =( T& ) // Без ссылки работает
  {
    Print(__FUNCSIG__);
  }
  
  void operator =( int )
  {
    Print(__FUNCSIG__);
  }
};

void f( A*& )
{
  Print(__FUNCSIG__);
}

void OnStart()
{
  A* a = new A;  
  
  A b;  
  b = a; // cannot convert type ' *' to reference of type 'A *'
  
  a = a;
  a = 1;
  
  f(a);
  
  delete a;
}

De alguna manera se queja de pasar un puntero por referencia. Al mismo tiempo, la función f recibe tranquilamente el puntero por referencia.


El resultado es

void A::operator=<A*>(A*)
void A::operator=(int)
void f(A*&)

El operador int fue llamado sin problemas, mientras que el operador puntero no.

 
Lógicamente, tampoco debería funcionar sin una referencia (imho). esto puede ser una característica de los punteros mql - que no necesitan ser dereferenciados
 
Комбинатор:
Lógicamente no debería funcionar sin referencia (imho). Puede ser una característica de los punteros mql - no necesitan ser dereferenciados.

Una petición a todos los que entienden del tema, vamos a descubrirlo. En este momento es un poco desordenado.

Solía pensar que un operador era sólo uno de los métodos que era conveniente utilizar por su sintaxis. Y ninguna otra distinción. Ahora resulta que no siempre es así.

 
fxsaber:

Solía pensar que un operador era sólo uno de los métodos

cualquier operador sí. pero

1. operador = uno de los más populares

2. el único operador generado por el compilador

 
Комбинатор:

cualquier operador sí. pero

1. operador = uno de los más demandados

2. el único operador generado por el compilador

Así que operador sobrecargado/anulado.

 

Me equivoqué, debería funcionar sin el enlace. significa que no funciona con el enlace debido a los matices de sustitución.

En los pluses funciona incluso con una referencia.

Si tiene dudas sobre este tipo de cosas, es mejor que lo compruebe con una referencia, por ejemplo, C++. sin embargo, la sintaxis puede ser ligeramente diferente

operator_fxsaber, C++ (gcc) - rextester
  • rextester.com
operator_fxsaber in C++ (gcc)
 
Комбинатор:

Me equivoqué, debería funcionar sin el enlace. significa que no funciona con el enlace debido a los matices de sustitución.

Funciona en los pluses y con un enlace.

Si tienes dudas sobre este tipo de cosas es mejor que lo compruebes con un referente, por ejemplo, C++. aunque la sintaxis puede ser ligeramente diferente

Gracias. Por desgracia, no hablo ningún otro idioma que no sea MQL. También tengo una mala comprensión del MQL. Estoy aprendiendo OOP en MQL.

 

Al principio pensé que no sabía nada de aritmética.


¿Cómo es posible que estos dos números sumen 138,95, y que la suma de dos ceros dé como resultado -24,34?

Pero entonces me di cuenta:

Si las posiciones abiertas ayer o antes se cierran hoy, no se mostrarán, pero sí participan en el cálculo del importe de las posiciones cerradas.

Si cambia la profundidad del historial mostrado y vuelve a seleccionar "Hoy", todas las posiciones perdidas volverán a su lugar.


¿Se solucionará este fallo? ¿O nadie lo necesita?