将结构传递给MQL4中的构造函数

时间:2015-09-06 10:30:01

标签: c++ mql4 mql5

当你有10个或更多时,将每个args传递给构造函数是繁琐且不易维护的 - 也使得读取构造函数args非常拖累。

我想使用的模式通常用在Ruby / Node / Python中,希望MQL4中有类似的东西

所以我想将键值对对象传递给包含所有args的构造函数。 不幸的是我得到了 -

struct cannot be defined in param list. 

来自编译器。

我在C总计n00b,这是我的第一个MetaQuotes4程序(EA)尝试。我用谷歌搜索并拖网文件。除了文档之外,找不到传递类,数组和结构的东西只能通过引用传递来完成。

问题是第10行。

Screen shot

它加载了编译错误 - 由于这是一个WIP。我可以处理的其余错误但是在params问题中不允许的结构让我感到困惑。任何帮助或建议都会很棒。

也许有另一种模式?

提前致谢。

2 个答案:

答案 0 :(得分:1)

小心 - MQL4在许多方面与C++编译器不相似

虽然语法构造函数看起来很相似,但 .MQL4 编译器在MetaLang.exe编译中限制或禁止实际使用。

所以, struct 看起来很有希望,但不符合您的愿望。

如您的打印屏幕所示,

...
string symbol = params.symbol;
...

您打算在string中添加 struct 类型值。

虽然这是可行的,但 MQL4文档却暗示了对此类 struct 使用的限制以及struct的唯一形式允许在函数调用参数传递中安全使用的只是 SIMPLE STRUCT ,即没有任何字符串组件的struct(在MQL4域中花费多年后,对于类似的 专业 ,您可能会 准备 。其中一些内容包含string内部不是string,而是struct并且噩梦刚刚开始......(你可以想象,你的DLL接口等会破坏什么)。

  

结构名称不能用作标识符(变量或函数的名称)。

  

应该注意的是,在MQL4中,结构元素直接相互跟随,没有对齐
在C ++中,使用以下指令对编译器进行这样的顺序:

#pragma pack(1)

  如果要在结构中进行另一个对齐,请使用辅助成员,“填充”到正确的大小。

  

使用 return 运算符,您无法返回任何数组,类对象,复合结构类型的变量。

所以要小心并从头到尾阅读MQL4文档,因为某些“专业”隐藏在某些地方,人们很难指望它们是先验的。

答案 1 :(得分:0)

您可以将其传递给const StructDef &_var_name之类的构造函数,例如:

class Order {

  // Define struct.
  struct Params {
    string symbol;
    double market_entry;
    double loss_pips;
    double profit_pips;
  };
  // Struct class variable.
  Params params;

  public:
  Order(const Params &_params) {
    this.params = _params;
  };

}

然后像这样使用它:

Params params = {_Symbol, Ask};
// or...
params.symbol = _Symbol;
params.market_entry = Ask;
// ... then:
Order *order = new Order(params);

请参阅:Structures, Classes and Interfaces