Errores, fallos, preguntas - página 49

 

Por qué el compilador no ve la diferencia entre int y color.

   void              CreateLabel(int x,int y,color COLOR);   
   void              CreateLabel(int x,int y,int n);

Si redefino una función, me regaña (dice que tengo cuidado de mezclar los pedales).

'CreateLabel' - ambiguous call to overloaded function with the same parameters
Si sólo hubiera parámetros por defecto, pero no hay ambigüedades, sólo hay que definir el tipo del parámetro pasado y seguir adelante.
 
Urain:

Por qué el compilador no ve la diferencia entre int y color.

Anulo una función, jura (dice que cuidado con mezclar los pedales).

Si sólo hubiera parámetros por defecto, pero no hay ambigüedades, sólo hay que definir el tipo del parámetro pasado y listo.
En este caso, el compilador se queja de que has creado dos funciones con el mismo nombre, y los parámetros pasados no tienen nada que ver.
 
sergey1294:
En este caso, el compilador se queja de que has creado dos funciones con el mismo nombre, y los parámetros que pasas no tienen nada que ver.

En ese caso, lea lo que significa la palabra "sobrecarga".

SZ así como la"sobrecarga de funciones".

Документация по MQL5: Основы языка / Функции / Перегрузка функций
Документация по MQL5: Основы языка / Функции / Перегрузка функций
  • www.mql5.com
Основы языка / Функции / Перегрузка функций - Документация по MQL5
 
Urain:

Una pregunta a la fraternidad de escritores, no un error o un fallo, sino una pregunta que puede sugerir...

Quiero obtener el nombre del puntero dentro de la clase pero no funciona.

En general, la esencia del asunto es que quiero que el nombre de la cadenadel objeto gráfico se asigne automáticamente.

Quiero obtener un nombre de cadena para él automáticamente.

Cuando se instala el objeto gráfico desde el método de la clase, el nombre debería asignarse automáticamente en función del cursor.

Todavía no sé cómo hacerlo, creo que podemos hacerlo desde cero.


En teoría, hay dos formas principales de nombrar automáticamente un objeto (con diversas variaciones sobre el tema, al implementarlo):

1. La generación de nombres se basa en una lista numerada

Una clase separada se encarga de la denominación del objeto, y mantiene los "numeradores" (que pueden ser para todos los objetos o para un grupo específico de objetos).

En este caso, el nombre se forma a partir de (preferentemente): tipo de objeto, nombre del símbolo (par de monedas), notación textual de TF y número de serie del objeto (tomado del numerador).

En este caso, dependiendo de la implementación, se puede rastrear la presencia del objeto en el gráfico, y no se puede.

2. El nombre se forma en base a la fecha y hora de creación del objeto.

El nombre bajo este enfoque puede formarse sobre la base de: tipo de objeto, nombre de símbolo, notación de texto TF y clave (formada sobre la base de la fecha y la hora).

PS

En la primera variante (en mi opinión) sería más razonable implementar en la clase y el ciclo completo de gestión de objetos (creación, modificación y eliminación)...

 
Urain:

En ese caso, lea lo que significa "sobrecarga".

ZS Bueno, así como la"sobrecarga de funciones".

No sabía que eso fuera posible.
 
sergey1294:
No sabía que esto era posible.

El polimorfismo y la sobrecarga de funciones son principios básicos de la programación orientada a objetos que deberían estar presentes en cualquier lenguaje que se precie.

Polimorfismo

El polimorfismo es un fenómeno que se produce cuando una función (método) con el mismo nombre corresponde a un código de programa diferente (código polimórfico) según el objeto de clase que se utilice para llamar al método. El polimorfismo se asegura cambiando la implementación del método de la clase ancestral en la clase descendiente con la preservación obligatoria de la firma del método. Esto asegura que la interfaz de la clase padre se conserva sin cambios y permite la vinculación de un nombre de método en el código con diferentes clases - el método con el nombre dado se toma del objeto de la clase desde la que se hace la llamada. Este mecanismo se denomina enlace dinámico (o tardío), a diferencia del enlace estático (temprano), que se realiza en tiempo de compilación.

Sobrecarga de funciones

Sobrecarga de procedimientos y funciones: una oportunidad para utilizar los subprogramas con el mismo nombre: procedimientos o funciones en los lenguajes de programación.


Ejemplo de la biblioteca estándar de clases comerciales, clase CAccountInfo:

double MarginCheck(const string symbol,ENUM_POSITION_TYPE trade_operation,double volume) const;
double MarginCheck(const string symbol,ENUM_ORDER_TYPE trade_operation,double volume) const;
 
ddd06:

Me pasé mucho tiempo hablando con el respetado MetaQuotes y demostrándoles que tenían un fallo, y me dijeron que no había ningún fallo.

Sin embargo, me mantuve firme y me aconsejaron que preguntara a la comunidad.

Así, tenemos un indicador y un Asesor Experto que toma los valores del indicador.

Inicio de la prueba en EURUSD del 01.07.2010 al 02.07.2010 en М1

Miramos el registro y vemos que los valores de un buffer cambian, y el otro no.

Esto dura una hora y luego el segundo buffer está vivo, pero si miras los valores del indicador no coincide.

Incluso intenté cambiar la cuenta y volver a cargar el historial, pero no sirvió de nada.

Aquí hay un enlace a mi terminal en rar 90mbhttp://dl.dropbox.com/u/6290215/MetaTrader%205%201111.rar, todo está configurado allí

Y el indicador con el asesor en el archivo adjunto

Ha enviado un código con un error. Naturalmente, es su código el que da la información errónea. Ha ignorado nuestras observaciones sobre la corrección del error, ofreciendo cada vez un nuevo código y cada vez con un error.
 
Urain:

Por qué el compilador no ve la diferencia entre int y color.

Anulo una función, jura (dice que cuidado con mezclar los pedales).

De acuerdo, habría parámetros por defecto, pero no hay ambigüedades, sólo hay que definir el tipo del parámetro pasado y seguir adelante.
Realmente hay un problema - lo investigaremos.
 
Urain, gracias por su mensaje. El error ha sido corregido.
 
stringo:
Ha proporcionado el código con un error. Naturalmente, este es su código que da información errónea. Al mismo tiempo, has ignorado nuestros comentarios sobre la corrección de errores, ofreciendo cada vez un nuevo código y cada vez con un error.

Sin embargo, si me hubieras dicho que no debería haber sincronización y que deberíamos incorporarla al código...

En cambio, te obstinaste en decir que todo coincide.

pero TimeToString(time[0],TIME_DATE|TIME_MINUTES)," buf1-",buf1[1]," buf2-",buf2[1]) en lugar de TimeToString(time[1],TIME_DATE|TIME_MINUTES)," buf1-",buf1[1]," buf2-",buf2[1]);

esto es ciertamente un error, pero no afecta al punto.

Una vez más me inventaré un indicador para comprobar lo equivocado que estaba.

Es decir, decías que todo coincide y has corregido el código del Asesor Experto. Pero en realidad no coincide nada y habría que arreglar el código del indicador (para integrar la sincronización en él).