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

 
Vikon:
Las impresiones sólo se pueden insertar dentro de una función, pero no entiendo cómo llamar a esta función para que la impresión o la alerta funcionen. ¿Puedes ayudarme arreglando mi código con tres simples variables? Hago todo como se describe en el artículo, pero el editor no funciona, o falta algo, o algo no se entiende, en cualquier caso, la pared, así que pedí ayuda. Gracias por el SKC.

Está emitiendo d con una alerta.

¿Dónde se calcula?

//+------------------------------------------------------------------+
//|                                                      TestASD.mq4 |
//|              Copyright 2017, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int      InputA=1;
input int      InputB=3;

class ASD
  {
private:
   // Здесь располагаются переменные и функции, доступные только внутри класса
   int c(int m_a,int m_b)
     {
      m_a=a+b; m_b=a-b;
      int m_d=m_a+m_b;
      d=m_d;
      Print(__FUNCTION__);
      return(c(m_a,m_b));
     }
public:
   int               a;
   int               b;
   int               d;
  };
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
ASD   ar;
void OnStart()
  {
//---
   ar.a=InputA;
   ar.b=InputB;
   Alert("ar.a=",ar.a,"\nar.b=",ar.b,"\nar.d=",ar.d);
  }
//+------------------------------------------------------------------+
¿Y cuál es el método que devuelve el resultado de llamarse a sí mismo?
 
Artyom Trishkin:
Dentro de la clase, haga las impresiones a los valores. Y luego mira en el registro lo que se imprimirá al ejecutar el script ;)

Y así también está bien.

clase:

class ASD
  {
private:
   // Здесь располагаются переменные и функции, доступные только внутри класса
  
  int a_s;
  int a_d;
  int d;

int g ()
{d=a_s+a_d;
return (g());
}

public:
void fg (int a,int b)
{ a_s=a;
   a_d=b;
}
void sf ()
  {g ();
  Alert (d);}

  };


el guión

#include <ASD.mqh>
ASD ar;
void OnStart()
  {

   ar.fg (3,5);
   ar.sf ();
}
 
Vikon:

Y así también está bien.

clase:

No está claro: ¿qué quieres conseguir?
 
Vikon:

Y así también nada

//+------------------------------------------------------------------+
//|                                                      TestASD.mq4 |
//|              Copyright 2017, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int      InputA=1;
input int      InputB=3;

class ASD
  {
private:
   // Здесь располагаются переменные и функции, доступные только внутри класса
public:
   int               a;
   int               b;
   int               d;
   int c(int m_a,int m_b)
     {
      m_a=a+b; m_b=a-b;
      d=m_a+m_b;
      Print(__FUNCTION__);
      return(d);
     }
  };
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
ASD   ar;
void OnStart()
  {
//---
   ar.a=InputA;
   ar.b=InputB;
   Alert("ar.a=",ar.a,"\nar.b=",ar.b,"\nar.d=",ar.d,"\nar.c(",ar.a,",",ar.b,")=",ar.c(ar.a,ar.b));
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin:
No está claro: ¿qué quieres conseguir?

Yo sí:

1. pasar datos del script a la clase
2. sumar estos datos en la clase
3. pasar la suma de la clase al script
4. desde el script, imprimir la suma de los datos en un monitor o impresora.

¡Todo!

 
Vikon:

Yo sí:

1. pasar los datos del script a la clase
2. sumar estos datos en la clase
3. pasar la suma de la clase al script
4. Desde el script, emita la suma de los datos a un monitor o impresora.

¡Todos!

Véase el ejemplo anterior
 
Artyom Trishkin:
Véase el ejemplo anterior
Pero tampoco da la suma de las variables a+b=d, ¡y yo necesito la suma de d! Y que esta suma se calcule en privado: ¡si no, al paredón!
 
Vikon:
¡Pero tampoco calcula la suma de las variables a+b=d, mientras que yo necesito la suma de d!

No te mostré exactamente lo que debería contar. Te mostré cómo obtener el valor calculado: llama a la función c();

No lo llamaste a ninguna parte, y esperaste a que d se calculara por sí mismo.

Y lo que calcula la función c() depende de ti

 
Artyom Trishkin:

No te mostré exactamente lo que debería contar. Te mostré cómo obtener el valor calculado: llama a la función c();

No lo has llamado en ningún sitio, y estabas esperando que d alguna manera se calculara solo.

Y tú debes decidir por ti mismo lo que cuenta la función c().

Conozco y uso cómo crear y llamar a la función en el Asesor Experto. La pregunta es sobre las clases.

 
Artyom Trishkin:

No te mostré exactamente lo que debería contar. Te mostré cómo obtener el valor calculado: llama a la función c();

No lo llamaste a ninguna parte, y estabas esperando que d alguna manera se calculara a sí mismo.

Y lo que calcula la función c() depende de ti

Esa es la cuestión, cómo llamar a una función dentro de una clase, es decir, cómo private: public:, cómo pasar datos a una clase y cómo obtener el resultado de la clase. Hasta ahora, esto es todo.

Pero su función tampoco calcula nada.