Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 93

 
Vikon:
As impressões só podem ser inseridas dentro de uma função, mas eu não entendo como chamar esta função para fazer a impressão ou alerta funcionar. Você pode ajudar, fixando meu código com três variáveis simples? Faço tudo como descrito no artigo, mas o editor não aparece, ou falta algo, ou falta algo, em qualquer caso, a parede, então pedi ajuda. Obrigado pelo SKC.

Você está emitindo d com um alerta.

Onde é calculado?

//+------------------------------------------------------------------+
//|                                                      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 qual método que retorna o resultado de se chamar a si mesmo?
 
Artyom Trishkin:
Dentro da classe, faça impressões a valores. E depois veja no registro o que será impresso ao executar o roteiro ;)

E assim também está tudo bem.

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

  };


o roteiro

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

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

E assim também está tudo bem.

classe:

Não está claro - o que você quer obter?
 
Vikon:

E assim também 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:
Não está claro - o que você quer obter?

Eu tenho:

1. para passar dados do roteiro para a classe
2. Somar esses dados na classe
3. Passe a soma da classe para o roteiro
4. A partir do roteiro, imprimir a soma dos dados em um monitor ou impressora.

Tudo!

 
Vikon:

Eu tenho:

1. passar dados do roteiro para a classe
2. Somar esses dados na classe
3. Passe a soma da classe para o roteiro
4. a partir do roteiro, enviar a soma dos dados para um monitor ou impressora.

Todos!

Veja o exemplo acima
 
Artyom Trishkin:
Veja o exemplo acima
Mas também não dá a soma das variáveis a+b=d, e eu preciso da soma de d! E que esta soma deve ser calculada em privado: caso contrário, o muro!
 
Vikon:
Mas também não calcula a soma das variáveis a+b=d, enquanto eu preciso da soma de d!

Eu não lhe mostrei exatamente o que deveria contar. Eu mostrei como obter o valor calculado - chamar a função c();

Você não o chamou em nenhum lugar, e esperou por d para de alguma forma se calcular.

E o que a função c() calcula depende de você

 
Artyom Trishkin:

Eu não lhe mostrei exatamente o que deveria contar. Eu mostrei como obter o valor calculado - chamar a função c();

Você não ligou para nenhum lugar, e estava esperando por d para de alguma forma se calcular.

E você deve decidir por si mesmo o que a função c() conta!

Eu sei como criar e chamar a função no Expert Advisor, e a utilizo. A questão é sobre as aulas!

 
Artyom Trishkin:

Eu não lhe mostrei exatamente o que deveria contar. Eu mostrei como obter o valor calculado - chamar a função c();

Você não chamou em nenhum lugar, e estava esperando o d para de alguma forma se calcular.

E o que a função c() calcula depende de você

Esse é o ponto, como chamar uma função dentro de uma classe, ou seja, como privada: pública:, como passar dados para uma classe e como obter o resultado da classe. Até agora é isso!

Mas sua função também não calcula nada.

Razão: