Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 93

 
Vikon:
Le stampe possono essere inserite solo all'interno di una funzione, ma non capisco come chiamare questa funzione per far funzionare la stampa o l'avviso. Puoi aiutarmi sistemando il mio codice con tre semplici variabili? Faccio tutto come descritto nell'articolo, ma l'editor non appare, o manca qualcosa, o manca qualcosa, in ogni caso, il muro, così ho chiesto aiuto. Grazie per l'SKC.

State emettendo d con un allarme.

Dove si calcola?

//+------------------------------------------------------------------+
//|                                                      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);
  }
//+------------------------------------------------------------------+
E quale metodo che restituisce il risultato della chiamata di se stesso?
 
Artyom Trishkin:
All'interno della classe, fate delle stampe ai valori. E poi guardate nel log cosa verrà stampato quando si esegue lo script ;)

E quindi va anche bene.

classe:

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);}

  };


lo script

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

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

E quindi va anche bene.

classe:

Non è chiaro - cosa vuoi ottenere?
 
Vikon:

E così anche niente

//+------------------------------------------------------------------+
//|                                                      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:
Non è chiaro - cosa vuoi ottenere?

Lo faccio:

1. per passare dati dallo script alla classe
2. sommare questi dati nella classe
3. passare la somma dalla classe allo script
4. dallo script, stampare la somma dei dati su un monitor o una stampante.

Tutto!

 
Vikon:

Lo faccio:

1. passare i dati dallo script alla classe
2. sommare questi dati nella classe
3. passare la somma dalla classe allo script
4. Dallo script, emetti la somma dei dati su un monitor o una stampante.

Tutti!

Vedere l'esempio precedente
 
Artyom Trishkin:
Vedere l'esempio precedente
Ma non dà nemmeno la somma delle variabili a+b=d, e io ho bisogno della somma di d! E che questa somma sia calcolata in privato: altrimenti il muro!
 
Vikon:
Ma non calcola nemmeno la somma delle variabili a+b=d, mentre io ho bisogno della somma di d!

Non vi ho mostrato esattamente cosa dovrebbe contare. Vi ho mostrato come ottenere il valore calcolato - chiamate la funzione c();

Non l'hai chiamato da nessuna parte e hai aspettato che d si calcolasse in qualche modo da solo.

E cosa calcola la funzione c() dipende da voi

 
Artyom Trishkin:

Non vi ho mostrato esattamente cosa dovrebbe contare. Vi ho mostrato come ottenere il valore calcolato - chiamate la funzione c();

Non l'avete chiamato da nessuna parte, e stavate aspettando che d si calcolasse in qualche modo da solo.

E dovete decidere da soli cosa conta la funzione c()!

So come creare e chiamare la funzione nell'Expert Advisor, e la uso. La domanda riguarda le classi!

 
Artyom Trishkin:

Non vi ho mostrato esattamente cosa dovrebbe contare. Vi ho mostrato come ottenere il valore calcolato - chiamate la funzione c();

Non l'hai chiamato da nessuna parte, e stavi aspettando che d si calcolasse in qualche modo da solo.

E cosa calcola la funzione c() dipende da voi

Questo è il punto, come chiamare una funzione all'interno di una classe, cioè, come privato: pubblico:, come passare dati a una classe e come ottenere il risultato dalla classe. Finora questo è tutto!

Ma anche la vostra funzione non calcola nulla.