2

我想要实现的是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可以导入ok)

4

1 回答 1

0

“新”-MQL4 语法正在演变

出于指定目的,

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

编译时语法:

导出没有 - 继承的函数class(将整个class 容器放在一起)不符合 OOP 概念。这在调用中清晰可见OnInit(),您的代码尝试调用一个函数,该函数实际上是一个基于类的对象method-目前还没有实例化任何objectmethod应该在其上执行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()
  }
于 2015-11-09T15:44:48.230 回答