Errores, fallos, preguntas - página 246

 
AlexSTAL:

Este es un método de clase

https://www.mql5.com/ru/docs/standardlibrary/technicalindicators/cindicator

#include<Indicators\Indicator.mqh>

Ya veo. Aparentemente,denkir no declaró#include<Indicators\Indicator.mqh>.

Pero una búsqueda en la Referencia sigue sin encontrar esta función.

 
Urain:

Entonces, ¿por qué jura el compilador, cuál es la ambigüedad de la llamada?


aparentemente se convierten los tipos int a long o viceversa, probablemente sólo se puede por el número de parámetros o por tipos que no se convierten automáticamente recargar las funciones

SZZ: trabaja sólo con long, los tipos int que pases como parámetros se convertirán automáticamente en long.

 
IgorM:

aparentemente se convierten los tipos int a long o viceversa, probablemente sólo se puede por el número de parámetros o por tipos que no se convierten automáticamente recargar las funciones

SZY: trabaja sólo con long, los tipos int que pases como parámetros se convertirán automáticamente en long.

La misma canción.

class CA
  {
public:
   void set(long i,long j,long n){Print("перегрузка long");};
   void set(long i,long j,int n){Print("перегрузка int");};
  };

void OnStart()
  {
//---
   CA a;
   int Int=3;
   long Long=4;
   a.set(1,2,Int);
   a.set(1,2,Long);
  }

La cuestión era hacer la sobrecarga de funciones para todos los tipos sin excepciones.

Y si un tipo no se corresponde con los valores del código i y j, generará una advertencia.

 
Urain:

Estimados desarrolladores, por favor, díganme qué es una llamada ambigua a una función sobrecargada (esto es lo que jura el compilador):

'set' - llamada ambigua a una función sobrecargada



Sí, hay un error, lo arreglaremos después de la publicación de la compilación

por ahora puedes usar

class CA
  {
public:
   void set(int i,int j,long n){Print("перегрузка long");};
   void set(int i,int j,int n){Print("перегрузка int");};
  };

void OnStart()
  {
//---
   CA a;
   int Int=3;
   long Long=4;
   a.set((int)1,(int)2,Int);
   a.set((int)1,(int)2,Long);
  }
 
Urain:

No hay problema no sólo con la sobrecarga de int y long, sobrecargar cualquier tipo el problema será el mismo.

Es sólo que el compilador maneja un parámetro explícito de una manera diferente.

Lo siento, no he corrido MT5 durante dos semanas, porque veo tantos posts enojados después de las últimas tres actualizaciones que ni siquiera quiero averiguar si el compilador no está funcionando o tal vez tengo la construcción equivocada, que tiene

así:

class CA
  {
public:
   void set(int i,int j,long n){Print("перегрузка long");};
   void set(int i,int j,double x){Print("перегрузка double");};
  };
  
void OnStart()
  {
//---
   CA a;
   int Int=3;
   double doubl=4;
   a.set(1,2,Int);
   a.set(1,2,doubl);
  }

Funciona, construcción 362.

 
mql5:

Sí, es un error, lo arreglaremos después de la publicación de la versión.

Mientras tanto, puedes usar esto

a.set((int)1,(int)2,Long);

Gracias. Lo tendremos en cuenta.
 
Yedelkin:

Ya veo. Aparentemente,denkir no declaró#include<Indicators\Indicator.mqh>.

Pero una búsqueda en el Manual sigue sin encontrar esta función.

¡Esto no es suficiente!

¡¡¡Este es un método de una clase externa!!!

 
AlexSTAL:

¡No es suficiente!

¡¡Este es un método de clase externa!!

Bueno, no soy un experto en esto, prefiero escribir todo a mano. Podrías por favor decirlea denkir lo que debe hacer, paso a paso.
 

Probablemente, hay que añadir algo así:

#include <Arrays\Array.mqh>
#include <Arrays\ArrayObj.mqh>

Pero no necesito un objeto de las clases mencionadas. Lo que necesito es una función sencilla para la cadena de tipo base que he descrito.

 
denkir:

Probablemente, hay que añadir algo así:

Pero no necesito un objeto de las clases mencionadas. Y necesito una función simple para la cadena de tipo base, que he descrito.

Pero para llegar a los métodos de la clase, hay que declarar la clase correspondiente, en nuestro caso es la clase CIndicator (MQL5 Reference / Standard Library / Classes for working with indicators / Basic classes / CIndicator). ¿No es así?

Razón de la queja: