[英]What is the correct way to define MQL4 “#import of static class methods”?
我想要實現的是在單獨的文件中定義類(使用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
,可以導入)
用於指定目的
類定義語法應足夠,在實例化一個類時,可以在實例對象上調用其public
方法。
導出沒有class
繼承的函數(將整個class
容器合並在一起)不適合OOP概念。 這在OnInit()
調用中清晰可見,您的代碼嘗試調用一個函數 ,該函數實際上是當前基於類的對象method
,而尚未實例化該method
應在其上的任何object
要執行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()
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.