Trading 定义MQL4的正确方法是什么#导入静态类方法“;?

Trading 定义MQL4的正确方法是什么#导入静态类方法“;?,trading,algorithmic-trading,mql4,metatrader4,Trading,Algorithmic Trading,Mql4,Metatrader4,我试图实现的是在单独的文件中定义类(使用MQL4),并在主代码中使用这些类中的方法。本质上是导入静态类成员函数 class example{ // ____ in example.mq4 public: static void myfunction(void) export { .. do something .. } } 编译器错误: myfunction:函数必须有一个主体 (注意ex

我试图实现的是在单独的文件中定义类(使用
MQL4
),并在主代码中使用这些类中的方法。本质上是导入静态类成员函数

 class example{                                            // ____ in example.mq4
   public:
   static void myfunction(void) export { .. do something .. }
 }


编译器错误:

myfunction:函数必须有一个主体

(注意
example.mq4
编译为
example.ex4
,可以导入ok)

“新”-MQL4语法正在演变 为了指明的目的

类定义语法应该足够,在实例化一个类时,可以在实例对象上调用它的
public
方法

编译时语法: 导出没有类继承的函数(将整个类继承在一起)不符合OOP概念。这在
OnInit()
调用中可以清楚地看到,您的代码尝试调用一个函数,该函数实际上是一个基于类的对象-
方法,此时还没有实例化任何
对象,应该在其上执行
方法
anObjectINSTANCE.aClassOrInstanceMETHOD()

所以,只需包含

class example{                                            // ____ in example.mqh

   public:
   static void myfunction() { .. do something; }

  }

main.mq4中的
/-------------------------------//\uuuuuuuuu
#属性严格/“新”-MQL4
#包括//include
示例anObject;//创建一个全局可见的实例
// ----------------------------
void OnInit(){
anObject.myfunction();//对自身执行方法的请求
return(空);/“new”-即使在void fun()上,MQL4也坚持返回
}

*拥有较大的项目,其中所有源代码文件都将包含在主文件中,这有点违背了OOP的目的,即我们希望公开方法并隐藏私有和受保护的方法。*从调试和错误预防的角度来看,将所有源代码包含到一个主文件中是不切实际的。因此,只有类定义才能解析到对象的链接,就像DLL的*也许有更好的解决办法?哦,是的,有。要么使用代理类,其方法调解与非公共实现的交互,要么进入完全分布式的处理模型,其中私有实现完全位于MQL4代码库外部,只提供交互代理(我们使用ZeroMQ信令/消息传递层进行分布式处理已经有好几年了,并且喜欢基于代理的模型——用于系统服务卸载、GPU网格计算、AI/ML预测设施联合集成AlgoTrading/MMI GUI增强交易等)
 #include <example.mqh>                                    // ____ in main.mq4:
 #import "example.ex4"
     void example::myfunction(void);
 #import
void OnInit(){
   example::myfunction();
}
class example{                                            // ____ in example.mqh

   public:
   static void myfunction() { .. do something; }

  }
// ----------------------------                          // ____ in main.mq4
#property strict            // "new"-MQL4

#include <example.mqh>      // include

example anObject;           // create a globally visible instance

// ----------------------------
void OnInit(){
     anObject.myfunction(); // request <anObject> to perform <myfunction> method on self

     return( EMPTY );       // "new"-MQL4 insists on return even on void fun()
  }