Errores, fallos, preguntas - página 2467

 
Igor Makanu:

Por primera vez intenté hacer una clase envolvente para un array bidimensional, pero no pude sobrecargar [] para tratarlo como un array bidimensional normal arr[1][2]

Este problema se resolvió hace 4-5 años, había una rama separada con soluciones ya hechas.
Pocos de los participantes activos sobrevivieron hasta hoy, la mayoría fueron expulsados...

P.d. No era una matriz bidimensional, sino una matriz tridimensional en las clases.

 
Oh, creo que he encontrado ese hilohttps://www.mql5.com/ru/forum/6729
В MQL5 всегда есть место подвигу ! ;)
В MQL5 всегда есть место подвигу ! ;)
  • 2012.05.16
  • www.mql5.com
Общее обсуждение: В MQL5 всегда есть место подвигу ! ;)
 
Sergey Dzyublik:

Este problema se resolvió hace 4-5 años, había una rama separada con soluciones ya hechas.
De los participantes activos, pocos han sobrevivido hasta el día de hoy, la mayoría fueron rebanados...

P.d. No era una matriz bidimensional, sino una matriz tridimensional en las clases.

Bueno, he ido a mirar en ese hilo: no hay ni una sola cuenta que haya sido baneada o borrada. Todas las personas de esa rama están ahí, y siguen vivas.

¿Es así como decidió crear un escándalo, lanzándolo a la administración? Es una tontería, ¿no? Deja de ver el mal por aquí.

 
Sergey Dzyublik:
Oh, creo que he encontrado esa ramahttps://www.mql5.com/ru/forum/6729

Creo que leí este hilo el mes pasado, lo volveré a mirar esta noche

pero mis experimentos con la sobrecarga [][] terminaron en darse cuenta de que puedo implementar tanto L-value como R-value en MQL usando la sobrecarga [][].

Si tienes una solución completa para una matriz bidimensional dinámica - ponla en CodeBase, es algo útil - no he buscado nada mejor que CMatrixDouble de MT: #include Math Alglib

 
class A{
public:
   uchar data1;
};

A func(){
   A a;
   a.data1 = 1;
   return a;      //object of 'A' cannot be returned, copy constructor 'A::A(const A &)' not found
}


void OnStart(){  
   A a;

   //1
   A aa = a;
   a = aa;
   
   //2
   a = func();   
}

¿Cuál es la diferencia entre //1 y //2?
Lamentablemente, este problema no puede evitarse cuando se utilizan plantillas en contenedores con un tipo de datos arbitrario.

Como caso especial, para resolver el problema, podemos implementar la herencia, definir un constructor de copia para la clase padre y sustituir el tipo de retorno en la función del problema de la base al padre.

 
Los promotores:
Por favor, añada una función que devuelva la Capacidad de un array (el número de elementos para los que hay espacio reservado en memoria). No debe confundirse con el parámetro de reserva para ArrayResize.
HayStringBufferLen para la cadena pero nadapara el array.
 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Bichos, errores, preguntas

Sergey Dzyublik, 2019.05.22 16:01

Gracias de nuevo aTheXpert por proporcionar el código.
Tenemos los siguientes resultados en la capacidad ArrayResize MT5(build 2057):


Resultado:
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TEST_ArrayCapacity:TEST_ArrayCapacity
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,0):100
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):100
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,101,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,200,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,201,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,202,100):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,1):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,400):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,300,400):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,301,600):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,302,600):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,303,600):903
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,0):903
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):903
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,-1):100
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):100
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,105,100):205

 

¡Buenas noches!

¿Puede alguien decirme qué está pasando?

Es la primera vez que veo que esto ocurre. Código simple en una de las funciones.

double yyy=28/50*100;
   
Print("test yyy=", yyy);

Resultado:

"2019.05.21 19:38:29.364 2019.04.01 00:05:00 test yyyy=0.0"


 
Michael2K:

¡Buenas noches!

¿Puede alguien decirme qué está pasando?

int(28) / int(50) * int(100) == int(0) * int(100) == int(0) == double(0.0)


Utilice un punto para especificar el tipo doble:

double yyy=28./50*100;
 
Sergey Dzyublik:
Por favor, proporcione también el pseudocódigo para utilizar el parámetro reserve_size en ArrayResize.
No hay una descripción de cómo se comporta el sistema cuando se establece un nuevo valor de reserve_size para el siguiente ArrayResize.
Sergey Dzyublik:


¿Es correcta la siguiente suposición cuando se llama de forma secuencial:

El pseudocódigo que dieron en su día en este hilo, búscalo. Que yo recuerde, ahí se aumenta la capacidad sólo cuando el tamaño del array supera esa capacidad. Aunque por supuesto algo podría haber cambiado.

Y la función de obtener el valor de una saraciedad es realmente muy útil.