在MQL4中使用面向对象编程时,可以将类的声明作为接口文件放在.mqh中,而把类的实现放在.ex4的库文件中吗?

 

一般在C++面向对象编程时,类的声明可以作为接口文件存放在头文件中,而将类的实现作为库文件存放在另外的文件中。在使用时,首先通过“#include”命令引用接口文件,然后再通过“#import”导入库文件链接最终代码。

我用MQL4编写了一个类,并将类的声明和实现分别放在两个文件中,如下所示:

类的声明在.mqh中,头文件中有导入库文件的“#import”语句:

 

类的实现在库文件中,库文件中有引用头文件的"#include"语句:

 

创建后两个文件都成功编译,并在库文件目录下生成了对应的.ex4库文件。

在调用类的主文件中我首先通过“#include”引用了声明类的.mqh头文件,编译时遇到如下问题: 

主文件中所有调用到类的成员函数的语句,都被编译器报错“functon must have a body”。

请问,是不是MQL4中,类的声明和实现不可以分开在不同的文件中,而必须在同一个.mqh文件中?还是我有哪里做得不对?谢谢! 

 

答案是 类的声明与实现是可以分开的。

你肯定是哪个地方搞错了。类的成员函数没有实现。

 
fxmeter:

答案是 类的声明与实现是可以分开的。

你肯定是哪个地方搞错了。类的成员函数没有实现。

我已经搞明白了,MQL推荐的方式是将类的实现直接放在头文件里,不支持直接将类的实现放在库文件里面,但是有变通的方式,可参考:https://www.mql5.com/en/articles/362
Promote Your Development Projects Using EX5 Libraries
Promote Your Development Projects Using EX5 Libraries
  • 2012.02.20
  • o_O
  • www.mql5.com
Hiding of the implementation details of classes/functions in an .ex5 file will enable you to share your know-how algorithms with other developers, set up common projects and promote them in the Web. And while the MetaQuotes team spares no effort to bring about the possibility of direct inheritance of ex5 library classes, we are going to implement it right now.
原因: