Fehler, Irrtümer, Fragen - Seite 2362

 
Ilya Malev:

Ich habe dort keine Funktionen, aber es ist genau die Aufgabe, die Sie beschrieben haben. Ich habe eine CNode (die Methoden Prev(), Next(), etc.) als die Basisklasse der Liste, und die Schleife ruft die Felder von COrder, die seine Nachkommenschaft ist. Die Schleife ruft Felder von COrder auf, das sein Nachkomme ist. Die Schleife wird 1 Mal in Defines deklariert und wird dann überall verwendet.

Ich habe versucht, Ihrem Beispiel zu folgen, aber ich möchte typedef verwenden

#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;
  }
//+------------------------------------------------------------------+

Jetzt überspringt der Compiler mein Beispiel, aber ich brauche ... irgendetwas wird benötigt ... aber was? Ich bekomme einen Fehler beim Ausführen:

Ungültiger Funktionszeigeraufruf in 'tst_file.mq4' (30,7)


 
Igor Makanu:

Sie mögen recht haben, ich habe Ihr Beispiel ausprobiert, aber ich möchte typedef verwenden

Jetzt überspringt der Compiler mein Beispiel, aber ich brauche... ich brauche etwas... aber was?

Ungültiger Funktionszeigeraufruf in 'tst_file.mq4' (30,7)


Ich muss also eine Funktion schreiben und sie dem Zeiger zuweisen)))

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:

Sie müssen also eine Funktion schreiben und sie einem Zeiger zuweisen)))

Hm, das macht Sinn, aber dann gibt es keinen Punkt, an dem ich die Klassenfelder ansprechen kann, wenn ich die Funktion folgendermaßen schreibe

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

'x' - Struktur- oder Klassentyp erwartet tst_file.mq4 30 38


 
Versuchen Sie es, wie ich oben geschrieben habe. Obwohl typedef hier nicht wirklich benötigt wird, da es ein zusätzliches "Polster" zwischen dem Code und dem Funktionsaufruf ist. Sie können diesen Aufruf jedoch nicht für eine andere Klasse mit demselben Zeiger überladen. Sie müssen für jede Klasse ein neues Exemplar erstellen. Es ist an der Zeit, dass Sie erkennen, dass Typendefinitionen kaum weniger als völlig nutzlos sind, imho :)
 
Igor Makanu:

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

 
Ilya Malev:
Versuchen Sie es, wie ich oben geschrieben habe. Obwohl typedef hier nicht benötigt wird, weil es ein zusätzlicher "Abstandhalter" zwischen dem Code und dem Funktionsaufruf ist. Sie können diesen Aufruf jedoch nicht für eine andere Klasse mit demselben Zeiger überladen. Sie müssen für jede Klasse ein neues Exemplar erstellen. Es ist an der Zeit, dass Sie erkennen, dass Typendefinitionen kaum weniger als völlig nutzlos sind, imho :)

Ich habe es versucht, aber ich weiß immer noch nicht, wie man mit defans arbeiten, Wissenschaft ist kompliziert, ich bekam Fehler: tst_file EURUSD,H1: ungültiger Zeiger Zugriff 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

HOORAY! ES HAT GEKLAPPT!!!

Ich danke Ihnen!

#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:

Ich habe es versucht, aber ich weiß immer noch nicht, wie man mit defans arbeiten, Wissenschaft ist kompliziert, ich bekam Fehler: tst_file EURUSD,H1: ungültiger Zeiger Zugriff in 'tst_file.mq4' (31,56)

Ich wäre sehr überrascht, wenn meine Schleife mit Ihrer Bibliothek Knoten funktionieren würde)))

Ich bezog mich natürlich auf den Typedef-Code in meinem letzten Beitrag)))

Igor Makanu:

HOORAY! ES HAT GEKLAPPT!!!

Danke!

;)

Wirklich, warum haben Sie nicht gleich das Naheliegendste versucht? :) Du wolltest unbedingt mit dem Typedef abrocken? =)))

 
Ilya Malev:

Wirklich, warum haben Sie nicht zuerst das Offensichtlichste versucht? :) Sie wollten unbedingt mit typedef rocken? =)))

Ich habe es versucht! Ich war mir sicher, dass ich nicht in der Lage sein würde , einen Zeiger mit MQL zu derefenzieren, aber es stellte sich als trivial heraus - ich hätte mehr Klammern setzen sollen! ))))

HH: typedef ist ein Thema, ich habe es versucht, aber es hat auch nicht geklappt, ich muss noch herausfinden, wo ich es vermasselt habe, mein Beispiel sollte auch mit typedef funktionieren!

 
Alexandr Sokolov:

Woran liegt es, dass der Indikator nur auf dem M1-Diagramm nicht funktioniert, auf allen anderen Diagrammen aber korrekt arbeitet? (MQL5). Hier ist die Funktion - und wenn ich ihr im M1-Diagramm den Wert 0 gebe, summiert sie irgendwie nicht eine Variable auf


Das bedeutet, dass es eine Kerze mit Open = Close gibt, während der Code falsch geschrieben ist und keine Prüfung der Division durch 0 enthält. Diese unglückliche Tatsache hängt nicht von der TF ab.