错误、漏洞、问题 - 页 2362

 
Ilya Malev:

我没有函数,但这正是你所描述的任务。 我有一个CNode(它有Prev(), Next()等方法)作为列表的基类,循环调用COrder的字段,它是它的子类。循环调用COrder的字段,它是它的后代。循环在定义中被声明了1次,然后被到处使用。

我试图遵循你的例子,但我想使用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;
  }
//+------------------------------------------------------------------+

现在编译器跳过了我的例子,但我需要......需要一些东西......但什么? 我在执行时得到一个错误。

在'tst_file.mq4'中调用无效的函数指针(30,7)。


 
Igor Makanu:

你可能是对的,我试过你的例子,但我想使用typedef

现在,编译器跳过了我的例子,但我需要......我需要一些东西......但什么?

在'tst_file.mq4'中调用无效的函数指针(30,7)。


所以,我需要写一个函数并将其分配给指针))

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:

所以,你需要写一个函数,并将其分配给一个指针))

嗯,这是有道理的,但这样一来,如果我以下面的方式写函数,就没有给我一个解决类字段的点了

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

'x' - 结构或类的类型预期 tst_file.mq4 30 38


 
试着像我上面写的那样。尽管这里并不真正需要typedef,因为它是代码和函数调用 之间的一个不必要的 "填充"。你仍然不能为另一个使用同一指针的类重载这个调用。你将不得不为每个班级制作一个新的。是时候让你意识到类型化定义是完全无用的了,我认为:)
 
Igor Makanu:

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

 
Ilya Malev:
试着像我上面写的那样。虽然这里不需要typedef,因为它是代码和函数调用 之间的一个额外 "间隔"。你仍然不能为另一个使用相同指针的类重载这个调用。你将不得不为每个班级制作一个新的。是时候让你意识到类型化定义是完全无用的了,我认为:)

我试过了,但我仍然不知道如何使用defans,科学是复杂的,我得到了错误: tst_file EURUSD,H1: 在'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

欢呼吧!它成功了!!!。

谢谢你!

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

我试过了,但我仍然不知道如何使用defans,科学是复杂的,我得到了错误: tst_file EURUSD,H1: 在'tst_file.mq4'无效的指针访问(31,56)

如果我的循环能与你的库节点一起工作,我会感到非常惊讶))

当然,我指的是我上一篇文章中的typedef代码))

伊戈尔-马卡努

欢呼吧!它成功了!!!。

谢谢!

;)

真的,你为什么不马上试试最明显的那个?:)你这么想和类型化的人一起摇滚?=)))

 
Ilya Malev:

真的,你为什么不先试一下最明显的那个?:)你这么想用typedef来摇滚?=)))

我试过了!我确信 不能用MQL来解除指针的定义,但事实证明这是微不足道的--我应该多加一些括号的!"。))))

HH:typedef是一个话题,我试过了,但也不太顺利,我还需要弄清楚我在哪里搞砸了,我的例子应该也可以用typedef来做!"。

 
Alexandr Sokolov:

为什么该指标可能只在M1图表上不工作,而在所有其他图表上却能正常工作,这是什么原因?(MQL5)。这是函数--当我在M1图表上给它0时,它不知何故没有将一个变量加起来


这意味着有一个开盘=收盘的蜡烛图,而代码写得不正确,没有包含除以0的检查,这个不幸的事实并不取决于TF。