Erros, bugs, perguntas - página 2362

 
Ilya Malev:

Não tenho funções lá, mas é exactamente a tarefa que descreveu. Tenho um CNode ( que tem métodos Prev(), Next(), etc.) como a classe base da lista, e o loop chama os campos de COrder, que é o seu descendente. O loop chama os campos de COrder, que é o seu descendente. O laço é declarado em define 1 tempo e depois é utilizado em todo o lado.

Tentei seguir o vosso exemplo, mas quero usar o typedef

#property strict
#include <Object.mqh>
#include <Arrays\List.mqh>
//+------------------------------------------------------------------+
class CMyclass:public CObject
  {
public:
   int               x;
   double            y;
   void              CMyclass(void):x(-1),y(-2.2) { }   
  };
  
typedef CMyclass (*PtrCMyclass)(CObject*); 
PtrCMyclass Myclass;
//+------------------------------------------------------------------+
void OnStart()
  {
   CList *base=new CList;
   for(int i=0;i<3;i++)
     {
      base.Add(new CMyclass);
      Myclass(base.GetCurrentNode()).x = 99;
      Myclass(base.GetCurrentNode()).y = -555.5;
     }
   for(int i=0;i<3;i++)
     {
      Print(Myclass(base.GetNodeAtIndex(i)).x," : ",Myclass(base.GetNodeAtIndex(i)).y);
     }
   delete base;
  }
//+------------------------------------------------------------------+

Agora o compilador salta o meu exemplo, mas eu preciso ... algo é necessário ... mas o quê? eu recebo um erro ao executar:

chamada do ponteiro da função nvalid em 'tst_file.mq4' (30,7)


 
Igor Makanu:

Pode ter razão, tentei o seu exemplo, mas quero usar o typedef

Agora o compilador salta o meu exemplo, mas eu preciso... preciso de algo... mas o quê?

chamada do ponteiro da função nvalid em 'tst_file.mq4' (30,7)


Portanto, preciso de escrever uma função e atribuí-la ao ponteiro))))

typedef CMyclass* (*PtrCMyclass)(CObject*);
CMyclass* FMyCast1(CObject*p){ CMyclass *r = dynamic_cast<CMyclass*>(p); if(CheckPointer( r ) != POINTER_INVALID) return r; else return NULL; }
PtrCMyclass Myclass = FMyCast1;
 
Ilya Malev:

Portanto, é necessário escrever uma função e atribuí-la a um ponteiro))))

Hm, faz sentido, mas depois não me dá um ponto para abordar os campos de classe se escrever a função da seguinte forma

PtrCMyclass Myclass(CObject* obj){ return(GetPointer(obj)); };

x' - estrutura ou tipo de classe esperada tst_file.mq4 30 38


 
Tente como eu escrevi acima. Embora o typedef não seja realmente necessário aqui, porque é um "acolchoamento" extra entre o código e a chamada de função. Ainda não se pode sobrecarregar esta chamada para outra classe usando o mesmo ponteiro. Terá de fazer um novo para cada aula. Já é tempo de se aperceber que os recifes datilografados são pouco menos do que completamente inúteis, imho :)
 
Igor Makanu:

((CMyclass*)base.GetNodeAtIndex(i)).x

 
Ilya Malev:
Tente como eu escrevi acima. Embora o typedef não seja necessário aqui porque é um "espaçador" extra entre o código e a chamada de função. Ainda não se pode sobrecarregar esta chamada para outra classe usando o mesmo ponteiro. Terá de fazer um novo para cada aula. Já é tempo de se aperceber que os recifes datilografados são pouco menos do que completamente inúteis, imho :)

Tentei, mas ainda não sei como trabalhar com defans, a ciência é complicada , recebi um erro: tst_file EURUSD,H1: invalid pointer access in 'tst_file.mq4' (31,56)

#property strict
#include <Object.mqh>
#include <Arrays\List.mqh>
//+------------------------------------------------------------------+
class CMyclass:public CObject
  {
public:
   int               x;
   double            y;
   void              CMyclass(void):x(-1),y(-2.2) { }
  };
//+------------------------------------------------------------------+
#define  alive(node)  (CheckPointer(node)==POINTER_DYNAMIC)
#define  loopf(type, node)  for(type *o; o=node;)
//+------------------------------------------------------------------+
void OnStart()
  {
   CList *base=new CList;
   CMyclass *res;
   for(int i=0;i<3;i++)
     {
      base.Add(new CMyclass);
      loopf(CMyclass,base.GetCurrentNode()){ o.x = 99; res.y = 555;}
     }

   for(int i=0;i<3;i++)
     {
      res=base.GetNodeAtIndex(i);
      Print(res.x," : ",res.y);
     }
   delete base;
  }
//+------------------------------------------------------------------+
 
TheXpert:

((CMyclass*)base.GetNodeAtIndex(i)).x

HORÁRIO! ELE TRABALHOU!!!

Obrigado!

#property strict
#include <Object.mqh>
#include <Arrays\List.mqh>
//+------------------------------------------------------------------+
class CMyclass:public CObject
  {
public:
   int               x;
   double            y;
   void              CMyclass(void):x(-1),y(-2.2) { }
  };
//+------------------------------------------------------------------+
void OnStart()
  {
   CList *base=new CList;
   for(int i=0;i<3;i++)
     {
      base.Add(new CMyclass);
      ((CMyclass*)base.GetCurrentNode()).x = 99;
      ((CMyclass*)base.GetCurrentNode()).y = 555;
     }

   for(int i=0;i<3;i++)
     {
      Print(((CMyclass*)base.GetNodeAtIndex(i)).x," : ",((CMyclass*)base.GetNodeAtIndex(i)).y);
     }
   delete base;
  }
//+------------------------------------------------------------------+

;)

 
Igor Makanu:

Eu tentei, mas ainda não sei como trabalhar com defans, a ciência é complicada, tenho erro: tst_file EURUSD,H1: invalid pointer access in 'tst_file.mq4' (31,56)

Ficaria muito surpreendido se o meu laço funcionasse com o vosso nó de biblioteca))))

Estava a referir-me ao código datilografar no meu último posto, claro))))

Igor Makanu:

HORÁRIO! ELE TRABALHOU!!!

Obrigado!

;)

Realmente, porque não tentou o mais óbvio de uma vez? :) Queria tanto balançar com o typedef? =)))

 
Ilya Malev:

A sério, porque não tentou o mais óbvio primeiro? :) Queria tanto abanar com o typedef? =)))

Tentei! Tinha a certeza de que não seria capaz de desreferenciar um ponteiro usando MQL, mas acabou por ser trivial - só precisava de colocar mais parênteses! ))))

ZS: digitação é um tópico, eu tentei, mas também não correu bem, ainda tenho de descobrir onde fiz asneira, o meu exemplo também deve funcionar com o typedef!

 
Alexandr Sokolov:

Qual é a razão pela qual o indicador pode não funcionar apenas no gráfico M1, mas em todos os outros gráficos que funciona correctamente? (MQL5). Aqui está a função - e quando lhe dou 0 no gráfico M1, de alguma forma não soma uma variável


Isto significa que existe um castiçal com Abrir = Fechar, enquanto o código está escrito incorrectamente e não contém a verificação da divisão por 0. Este facto infeliz não depende da TF.