Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1098

 
Grigori.S.B:

Por favor, dígame por qué el compilador genera una advertencia en el siguiente código de script de prueba MQL4:

Una advertencia en la línea 27 sobre la incompatibilidad de tipos de datos. Ambas variables tienen el mismo tipo int. A continuación se muestra una captura de pantalla de la compilación del script.

Si sustituyo la línea 27 por

la advertencia no aparece.

¿Cuál es el truco?

No hay ningún truco. La variable t se declara como double

De hecho, esta t no tiene sentido en ningún sitio.

 
Alexey Viktorov:

Y no hay ningún truco. La variable t se declara como double

Muchas gracias, estoy trabajando mucho, es hora de descansar.

Alexey Viktorov:

De hecho, esta t no lleva ningún valor a ninguna parte.

Es una variable buffer que se utiliza para almacenar temporalmente el resultado durante la ordenación.

 

¿En qué se diferencian estos métodos de inicialización?

class Klas{};
Klas *Klas_
Klas Klas_
 
Seric29:
1. class Klas{};
2. Klas *Klas_
3. Klas Klas_

1. tipo (clase) descripción

2. declaración de tipo (clase) puntero

3. declaración de la instancia de la clase - esto es la inicialización, porque se llamará al constructor Klas() si no se describe, entonces se llamará al constructor por defecto - ayuda

Seric29:

¿En qué se diferencian estos métodos de inicialización?

es decir, la inicialización sólo paso 3.

 
Igor Makanu:

1. tipo (clase) descripción

2. declaración de tipo (clase) puntero

3. declaración de la instancia de la clase - esto es la inicialización, porque el constructor Klas() será llamado si no se describe, entonces el constructor por defecto será llamado - ayuda

es decir, sólo se inicializa la cláusula 3.

No he visto cómo inicializarlas en la ayuda, tal vez sólo lo vi y no lo entendí, ya que las clases están mal descritas en la ayuda - la leí 30 veces.

Sí, efectivamente después de la clase como no tengo entradas pero han puesto este código en OnStart

   CFoo foo1(TimeCurrent());     // явный вызов параметрического конструктора 
   CFoo foo2();                  // явный вызов параметрического конструктора с параметром по умолчанию 
   CFoo foo3=D'2009.09.09';      // неявный вызов параметрического конструктора 
   CFoo foo40(foo1);             // явный вызов конструктора копирования 
   CFoo foo41=foo1;              // неявный вызов конструктора копирования 
   CFoo foo5;                    // явный вызов конструктора по умолчанию (если конструктор по умолчанию отсутствует, 
                                 // то вызывается параметрический конструктор с параметром по умолчанию) 
//--- допустимые варианты получения указателей CFoo 
   CFoo *pfoo6=new CFoo();       // динамическое создание объекта и получение указателя на него 
   CFoo *pfoo7=new CFoo(TimeCurrent());// ещё один вариант динамического создания объекта 
   CFoo *pfoo8=GetPointer(foo1); // теперь pfoo8 указывает на объект foo1 

Entiéndelo como quieras. No sé por qué tienes que explicarlo así.

CFoo *pfoo6=new CFoo();       // динамическое создание объекта и получение указателя на него

No entiendo por qué necesito este puntero.

CFoo *pfoo7=new CFoo(TimeCurrent());// ещё один вариант динамического создания объекта 

¿Y para qué sirve esto? Lo que quieras y lo que creas que significa.

CFoo foo3=D'2009.09.09';      // неявный вызов параметрического конструктора

Tampoco entiendo qué significa esto.

CFoo foo40(foo1);             // явный вызов конструктора копирования 
Tampoco está claro para qué sirve esto. No lo habrían subido, sino que habrían escrito la idea de forma normal y sencilla.
 

Saludos.

¿Podría decirme cómo se calculan los niveles horizontales de la cuadrícula en mt4 y en mt5?

 
Seric29:

Y por qué inicializar vía puntero, no he visto para nada en la ayuda cómo inicializarlos quizás miré y no entendí, porque las clases están mal descritas en la ayuda leída 30 veces.

un puntero es un puntero, la inicialización es la inicialización

entender este código primero:

1. int a;
2. int a = 5;

¿Qué es la inicialización en este código y qué es una declaración de variable?

¿Cuándo se asigna la memoria?

y luego tratar el tema de la POO y los punteros a una clase y los punteros a un objeto con este conocimiento.


vete, por alguna razón no puedo responder a las preguntas elementales

 
Igor Makanu:

un puntero es un puntero, una inicialización es una inicialización

entender este código primero:

¿qué es en este código la inicialización y qué es la declaración de variables?

¿Cuándo se asigna la memoria?

y luego utilizar este conocimiento para discutir la POO y los punteros a una clase y los punteros a un objeto.


se ha ido, por alguna razón no puedo responder a las preguntas elementales.

He aquí un ejemplo sencillo y claro. La primera variante es la declaración de la variable y la asignación de memoria (la variable almacena un valor arbitrario por defecto o un número de sector o una dirección en C++, no lo sé), la segunda variante es la inicialización.

Y para qué sirven estos punteros a Tipo y con qué comerlos también debería haberse explicado con normalidad.

Punteros a una clase y punteros a un objeto

Yo también debería haber entendido lo que son, lo buscaré en la red a ver si hay algo.

 
Andrey Sokolov:

Saludos.

¿Cómo se calculan los niveles horizontales de una cuadrícula en mt4 y en mt5?

Si quiere detectar un nivel horizontal, primero debe determinar el precio máximo de apertura y luego añadir algún valor y obtener un nuevo precio que le permita observar cuando el precio rompe esta condición de nivel y colocar una nueva orden o colocar una parrilla de órdenes pendientes teniendo en cuenta el número de órdenes máximas y luego mostrar esta parrilla


allí, en general, cualquier código compacto es más fácil de ver y modificar para sus propias tareas


No sé si lo has probado y nunca he probado muchos programas y creo que es más difícil de usar en TS simples, pero tal vez nunca lo has probado.

 
Seric29:

He aquí un ejemplo sencillo y claro. La primera opción es la declaración de la variable y la asignación de la memoria (la variable almacena un valor arbitrario por defecto o un número de sector o una dirección en C++, aquí no lo sé), la segunda opción es la inicialización.

Y el por qué de estos punteros al Tipo y con qué comerlos también debería haberse explicado adecuadamente.

laasignación de memoria será en el Ejemplo 1 y en el Ejemplo 2

el ejemplo 2 es una declaración e inicialización, el ejemplo 1 es sólo una declaración

la clase es la misma, la clase es un tipo definido por el usuario que contiene campos (propiedades) y métodos para trabajar con estos campos

un puntero a una clase es una declaración, pero sin inicialización y sin asignación de memoria para el tipo (clase)

pointer = new MyClass(); - esto es una declaración e inicialización, que crea una nueva instancia de la clase y esta instancia será devuelta como un enlace a un objeto (no es exactamente un enlace, en MQL no es ... importante y así se confunde)

....

si no quieres leerlo, al menos utiliza este post mío para modificar tu ejemplo:

CFoo *pfoo6=new CFoo();

a

CFoo *pfoo6;
pfoo6 = new CFoo();
CFoo *pfoo_7 =  pfoo6;

y tratar de entender lo que sucede - cuando se asigna la última línea a..... pero todavía leer, sólo preguntar en los foros no es una opción