定义MQL4“#import of static class methods”的正确方法是什么?

时间:2015-04-06 10:09:33

标签: trading algorithmic-trading mql4 metatrader4

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

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

 class example{                                            // ____ in example.mqh
   public:
   static void myfunction(void);
 }

 #include <example.mqh>                                    // ____ in main.mq4:
 #import "example.ex4"
     void example::myfunction(void);
 #import

使用该函数时导致编译错误,如下所示:

void OnInit(){
   example::myfunction();
}

编译错误:

  

myfunction: function must have a body

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

1 个答案:

答案 0 :(得分:0)

“新”-MQL4语法正在发展

用于指定目的,

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

编译时语法:

导出一个没有它的函数 class - 继承(将整个class 容器整合在一起)不符合OOP概念。这在OnInit()调用中清晰可见,您的代码尝试调用函数,实际上是基于类的对象 - method 暂时还没有实例化 object method应该执行anObjectINSTANCE.aClassOrInstanceMETHOD()

所以,只需#include

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